Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given 1->2->3->4->5->NULL and k = 2,
return 4->5->1->2->3->NULL.
看到這個題第一秒有點懵,想我們怎么可以知道找到倒數第幾個node然后points to head.
隨后就想到,哦! 處理List這種情況的套路應該是Fast/Slow pointer, 間隔為K。當Fast為last Node 的時候, Slow剛好 在倒數第K個Node,然后讓LastNode指向head。
證明碰到難題的時候不要慌自習想一下還是有突破口的【想思路的時候盡量先不想具體的code】
...
具體實現的時候,發現還有一些事是之前沒有考慮進去的。 就是k > List長度的時候的情況
如果是: 1-->2 ?k = 3的話, 應該變成 ?2-->1 因為 right rotae once. 2-->1 , right rotate twice 1-->2, Right rotate third, 2-->1
不過經過了一小段嘗試,最后的結果是 runtime beat 99.3%
我的做法是先用了一個for loop衡量了一下List的具體長度。 然后用k % 長度得出 真實shift值。這樣做的好處是無視掉shift的倍數問題。
【不過我發現我做題的時候竟然有一個趨勢是第一次就去追求最優解,這是一個很不好的習慣 ?一開始我是很拒絕用一個for loop來測定list長度的 害怕時間上會增加 ?不過沒想到這么做還比很多Leetcode大神更快】