LeetCode61 旋轉鍊錶

2022-08-11 09:33:10 字數 1131 閱讀 2675

要將鍊錶向右移動 k 次,可以將鍊錶分為兩部分:不移動部分和移動部分。

不移動部分就是鍊錶前 size - k 個結點(size為鍊錶結點個數),移動部分就是鍊錶後 k 個結點。

對於移動部分的 k 個結點,需要將第乙個結點置為新的 head 結點,並且移動部分的最後乙個節點的 next 指標指向不移動部分的第乙個結點。

而對於不移動部分,需要將最後乙個結點的 next 指標指向null,因為這個結點是新鍊錶的尾結點。

具體見**:

class solution 

listnode* tail; //tail表示最後乙個非空節點,也就是移動部分的最後乙個節點

int size = 0; //size表示鍊錶非空節點的個數,k需要對size取餘

for(listnode* p = head; p != null; p = p -> next)

k = k % size; //k需要對size取餘,因為每移動size次就等於沒移動

if(k == 0)

listnode* first = head; //first表示移動部分的最後乙個節點

for(int i = 0; i < size - k - 1; ++i)

tail -> next = head; //移動部分放到了不移動部分的前面,所以移動部分的尾節點的next指標指向移動部分的第乙個節點head

head = first -> next; //此時不移動部分的最後乙個節點first的next指標指向移動部分的第乙個節點,而移動部分的第乙個節點就是新鍊錶的頭節點,所以更新一下

first -> next = null; //因為first是新鍊錶的尾結點,所以first的next指標指向null

return head;}};

leetcode 61 旋轉鍊錶

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

LeetCode61 旋轉鍊錶

很久沒有寫blog了,以至於很長一段時間我都忘記了我還有乙個csdn賬號。也就是每週參加以下leetcode周競賽,膜拜一下大佬,然後發現自己真的是蠢以及一無是處,想的辦法總是,非常蠢。一般就做簡單的題目,這道題是leetcode估計實在是看不下去了,給我email說邀請我做個演算法題,我看了一下,...

LeetCode 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...