05-01.K 個一組翻轉鏈表

題目

給你一個鏈表,每 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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章