給定乙個鍊錶,將鍊錶向右迴圈移動 kk 次,kk 是非負整數。
輸入: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
輸入:0->1->2->null, k = 4
輸出:2->0->1->null
向右移動1步:2->0->1->null
向右移動2步:1->2->0->null
向右移動3步:0->1->2->null
向右移動4步:2->0->1->null
快慢指標找到倒數第k個元素,將後k個新增到頭,從倒數k個斷開,更新頭結點,便是翻轉後的鍊錶
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution
k%=n;//比如鍊錶長度3,迴圈右移5位和2位結果是一樣的,這樣可以將移動次數控制在小於n的情況,方便情況的討論if(
!k)return head;
//移動長度的倍數等於不移動
listnode *dummy = new listnode(0
);//建立虛擬頭結點,方便鍊錶操作
dummy->next = head;
//構建快慢指標,來找到倒數k個元素的位置
listnode *first = dummy;
//塊指標
listnode *second = dummy;
//慢指標
while
(k--
) first=first->next;
//塊指標先走k次
while
(first->next)
first->next=dummy->next;
//將鍊錶末尾連上鍊表的頭,成環
dummy->next=second->next;
//找到新的鍊錶的頭結點,就是慢指標所指向的結點
second->next =
null
;//從慢指標處解開鍊子
return dummy->next;
//返回翻轉後的鍊錶}}
;
leetcode 騰訊精選50題 21
given a linked list,rotate the list to the right by k places,where k is non negative.鍊錶的特殊性在於其可以只改變其所指向的位址,而不改變資料存放的真正位址,於是將其收尾閉合後可直接得到乙個閉環的鍊錶,在將其在指定的...
leetcode騰訊精選50題(1)
菜鳥第一課 給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素...
leetcode 騰訊50題 4 50 整數反轉
給定乙個int型整數,請將各位數字反轉。如果結果大於int max或小於int min,請返回0.樣例1輸入 123 輸出 321 樣例2輸入 123 輸出 321 樣例3輸入 120 輸出 21 通過 10每次取出最後一位,然後 10將最後一位刪去,將取出的那位不停加入到翻轉的數字上,當原數字刪除...