鍊錶 LeetCode 25 K組乙個翻轉鍊錶

2022-10-06 10:42:14 字數 1188 閱讀 2868

示例 1:

輸入:head = [1,2,3,4,5], k = 2

輸出:[2,1,4,3,5]

示例 2:

輸入:head = [1,2,3,4,5], k = 3

輸出:[3,2,1,4,5]

示例 3:

輸入:head = [1,2,3,4,5], k = 1

輸出:[1,2,3,4,5]

示例 4:

輸入:head = [1], k = 1

輸出:[1]

(ps:還是加上title吧不然太難受了)
題目分析
首先實現翻轉鍊錶的方法此題用『遞迴-回溯』的方法比較簡單,需要注意的一點是在『遞迴-回溯』結束時返回的節點為之前的頭節點,所以注意預處理區域性鍊錶的頭尾指標,並且在一組結束的時候對下一組的頭尾指標進行預處理。

分組鍊錶

初始化頭尾指標

指標移動記位,當長度為一組進行反轉

鍊錶之間的鏈結處理

反轉後初始化頭尾指標

總結。2345迴圈執行

執行耗時:0 ms,擊敗了100.00% 的j**a使用者

記憶體消耗:41.4 mb,擊敗了5.10% 的j**a使用者

鍊錶反轉
private listnode swapgroup(listnode head,int k)

listnode next = swapgroup(head.next,k - 1);

head.next = null;

next.next = head;

return head;

}

分組處理鍊錶

public listnode reversekgroup(listnode head, int k) 

if(pointer_fast==null)break;

pointer_fast = pointer_fast.next;

size++;

}return header.next;

}

leetcode25 k組翻轉鍊錶

這題可以參考206的答案,事實上,我直接把翻轉部分的 用了leetcode206官方題解上面的,只是做了一點小修改,以保證是前k個反轉 我們具體分析核心函式 reversekgroup 乙個關鍵是怎麼把這個問題分解成好幾個單獨的翻轉問題,我這裡的reverselist函式做了改動,只反轉前面k個節點...

LeetCode 25 k個一組翻轉鍊錶

給出乙個鍊錶,每 k 個節點一組進行翻轉,並返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。給定這個鍊錶 1 2 3 4 5 當 k 2 時,應當返回 2 1 4 3 5 當 k 3 時,應當返回 3 2 1 4 5 這...

LeetCode 25 K個一組翻轉鍊錶

按照每k個為一組,記錄這組內的頭和尾,第一組只需記錄翻轉後的尾即tail 接下來的每一組記錄翻轉後頭 nhead 和尾 ntail.注意更新的順序 class solution length k if length 0 return head p head listnode otail head l...