題目
給你一個鏈表,每 k 個節點一組進行翻轉,請你返回翻轉後的鏈表。
k 是一個正整數,它的值小於或等於鏈表的長度。
如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。
示例:
給你這個鏈表:1 - > 2 - > 3 - > 4 - > 5
當 k = 2 時,應當返回: 2 - > 1 - > 4 - > 3 - > 5
當 k = 3 時,應當返回: 3 - > 2 - > 1 - > 4 - > 5
代碼
class Solution {
public ListNode reverseKGroup ( ListNode head, int k) {
if ( head == null || k < 2 ) {
return head;
}
ListNode preNode = new ListNode ( 0 ) ;
preNode. next = head;
ListNode node = preNode;
ListNode currentNode = head;
Stack< ListNode> stack = new Stack < ListNode> ( ) ;
while ( currentNode != null) {
stack. push ( currentNode) ;
currentNode = currentNode. next;
if ( stack. size ( ) == k) {
while ( ! stack. isEmpty ( ) ) {
preNode. next = stack. pop ( ) ;
preNode = preNode. next;
}
}
}
ListNode last = null;
while ( ! stack. isEmpty ( ) ) {
last = stack. pop ( ) ;
}
preNode. next = last == null ? null : last;
return node. next;
}
}