旋轉鍊錶 巧轉迴圈鍊錶

2021-10-04 08:23:45 字數 1344 閱讀 4356

給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 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...