給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。
k 是乙個正整數,它的值小於或等於鍊錶的長度。
如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。
示例:給你這個鍊錶:1->2->3->4->5
當 k = 2 時,應當返回: 2->1->4->3->5
當 k = 3 時,應當返回: 3->2->1->4->5
說明:你的演算法只能使用常數的額外空間。
你不能只是單純的改變節點內部的值,而是需要實際進行節點交換。
tip:
1. 遞迴
2. 關鍵是要儲存每次的head, 下一次的head, 還要將兩次翻轉鏈結,所以還需要每次的尾節點。
head -> ⋯
\cdots
⋯ -> tail -> nexthead
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
return
reverseknode
(head, k);}
listnode *
getlastnode
(listnode *head,
int k)
return tail;
} listnode *
reverseknode
(listnode *head,
int k)
listnode *nexthead = result-
>next;
/* 保持下一次待翻轉的鍊錶的頭 */
listnode *temp = result;
int tempk = k;
while
(--tempk)
temp-
>next = nexthead;
temp-
>next =
reverseknode
(nexthead, k)
;/* 遞迴:下一輪翻轉 */
return result;}}
;
給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 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->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
統計長度和找到尾節點
左旋變右旋
找到右旋之後的首節點
將原來的首節點鏈結在位節點後
新的尾節點的next賦值null
/**
* definition for singly-linked list.
* struct listnode
* };
*/#define __debug__ 0
class
solution
listnode *tail =
null
;int cnt =
gettotallen
(head,
&tail)
;int step = cnt - k % cnt;
/* 右旋變左旋 */
if(step == cnt)
listnode *temp = head;
listnode *newhead;
listnode *newtail;
while
(--step >=0)
newhead = temp;
/* 將前面的點左旋到尾節點後面 */
tail-
>next = head;
newtail-
>next =
null
;return newhead;
}int
gettotallen
(listnode *head, listnode *
*tail)
*tail = head;
return cnt;}}
;
鍊錶K個節點翻轉
題目描述 結果分析 題目思路 利用棧的先進後出的性質,1 將需要翻轉的結點壓入棧中 2 將需要翻轉的最後一節結點的後乙個結點儲存下來 3 定義乙個頭結點,將棧中結點,取棧頂結點,鏈結起來 4 當棧中資料全部取出後,將儲存的後乙個結點鏈結起來 返回頭結點即可。實現 listnode rotatelis...
鍊錶的K組翻轉問題
在這兩天的刷題中,遇到乙個求鍊錶的翻轉問題,坦白講,這個問題我想得思路有很多種,但在這麼多種的思路中,沒有乙個是能夠輕易實現的。題目如下。鍊錶翻轉。給出乙個鍊錶和乙個數k,比如鍊錶1 2 3 4 5 6,k 2,翻轉後2 1 4 3 6 5,若k 3,翻轉後3 2 1 6 5 4,若k 4,翻轉後4...
450 K組翻轉鍊錶
中文english 給你乙個鍊錶以及乙個k,將這個鍊錶從頭指標開始每k個翻轉一下。鍊錶元素個數不是k的倍數,最後剩餘的不用翻轉。example 1 input list 1 2 3 4 5 null k 2 output 2 1 4 3 5example 2 input list 1 2 3 4 5...