給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 k 個位置,其中 k 是非負數。輸入示例: 1->2->3->4->5->null, k = 2
輸出示例:4->5->1->2->3->null
解釋:向右旋轉 1 步: 5->1->2->3->4->null
向右旋轉 2 步: 4->5->1->2->3->null
c++結構體:
/** * definition for singly-linked list.
* struct listnode
* };
*/ c++函式形式: listnode*
rotateright
(listnode* head,
int k)
我們首先需要了解迴圈
在這裡的含義:
為了方便得到解決的思路,我們可以看乙個例子:
移動完後的鍊錶是下面這個例子:
發現很神奇的事情沒有,我們可以看出,只要把第乙個鍊錶從4
開始斷開,然後重新做為表頭,接到1
的前面,是不是就完成了這樣的旋轉操作。
從第乙個例子可以看出,就是從尾部開始的第k
個元素開始斷開的,如果k=0
,也就相當於沒有斷開,就是原鍊錶。
但是還有乙個情況,如果這個k
大於了鍊錶的長度會怎樣呢?
我們可以看到這個鍊錶的長度是5
,如果旋轉5
次,那麼又回到了原來的鍊錶,旋轉6
次,就回到了原來旋轉一次的樣子,所以,我們可以發現這是乙個迴圈的過程,也就是說,假設鍊錶的長度是n
,那麼k
的實際有效值就是k%n
,這個很好理解,大於n
後,就是跟之前的情況是一樣的了。
注:**leetcode。
其實也就是n-k%n-1
的位置,就是斷開的上乙個元素。
於是我們有了一條思路了:
第一種方法的具體步驟:
第二種方法的具體步驟:
這裡需要注意的是:
class
solution
};
atfwus --writing by 2020–03–24
鍊錶 旋轉鍊錶
力扣原題 definition for singly linked list.public class listnode class solution 計算鍊錶長度 int length 0 listnode cur head while null cur 模擬k輪鍊錶旋轉 for int i 0 ...
(鍊錶)61 旋轉鍊錶
給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 k 個位置,其中 k 是非負數。示例 1 輸入 1 2 3 4 5 null,k 2 輸出 4 5 1 2 3 null 解釋 向右旋轉 1 步 5 1 2 3 4 null 向右旋轉 2 步 4 5 1 2 3 null 示例 2 輸入 0 1 2 ...
迴圈鍊錶,雙向鍊錶
迴圈鍊錶 迴圈鍊錶與順序鍊錶之間的區別 迴圈鍊錶最後乙個資料的next指標域不為空,而是指向頭結點,其他基本操作大體相同,只是在判斷表結束的條件變為判斷節點的引用域是否為頭引用 雙向鍊錶 author neosong date oct 10,2017 4 43 01 pm program of in...