leetcode 騰訊50題 21 50 翻轉鍊錶

2021-09-22 12:25:36 字數 1201 閱讀 2668

給定乙個鍊錶,將鍊錶向右迴圈移動 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將最後一位刪去,將取出的那位不停加入到翻轉的數字上,當原數字刪除...