要將鍊錶向右移動 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...