【LeetCode笔记】25. K个一组翻转链表(Java、链表、递归)
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode笔记】25. K个一组翻转链表(Java、链表、递归)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目描述
- 思路 & 代碼
- 更新 - 精簡版
- 三刷 - 再更新版
題目描述
- 審題很重要。。一開始以為是一組換兩個,但是實際上是一組全部都要互換。
- 字節超高頻題!要認真點記錄
思路 & 代碼
- 用回溯來做,可以分解成:每次都用head和之后的k-1個結點進行翻轉操作,在翻轉之前先把第k+1個結點傳入下一個翻轉函數,然后再翻轉當前Head,并且連接上第k+1個結點。
- 題目不難,但是要注意考慮邊界條件,還有由于鏈表性質導致的問題(指針丟失、弄混等)。
更新 - 精簡版
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/ class Solution {// 遞歸public ListNode reverseKGroup(ListNode head, int k) {ListNode lastNode = head;for(int i = 0; i < k - 1; i++) {lastNode = lastNode.next;// 不夠 k 個的情況if(lastNode == null) {return head;}}// 1. 先繼續往后走ListNode nextHead = null;if(lastNode.next != null) {nextHead = reverseKGroup(lastNode.next, k);}// 2. 翻轉當前kListNode now = head, pre = null;for(int i = 0; i < k; i++) {ListNode temp = now.next;now.next = pre;pre = now;now = temp;}// 3. 銜接head.next = nextHead;return pre;} }三刷 - 再更新版
- 有一說一,感覺這個更新 nice 多了!
總結
以上是生活随笔為你收集整理的【LeetCode笔记】25. K个一组翻转链表(Java、链表、递归)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python分配 使最大的最小_pyth
- 下一篇: 【LeetCode笔记】剑指Offer