【LeetCode笔记】25. K个一组翻转链表(Java、链表、递归)
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode笔记】25. K个一组翻转链表(Java、链表、递归)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 題目描述
- 思路 & 代碼
- 更新 - 精簡(jiǎn)版
- 三刷 - 再更新版
題目描述
- 審題很重要。。一開(kāi)始以為是一組換兩個(gè),但是實(shí)際上是一組全部都要互換。
- 字節(jié)超高頻題!要認(rèn)真點(diǎn)記錄
思路 & 代碼
- 用回溯來(lái)做,可以分解成:每次都用head和之后的k-1個(gè)結(jié)點(diǎn)進(jìn)行翻轉(zhuǎn)操作,在翻轉(zhuǎn)之前先把第k+1個(gè)結(jié)點(diǎn)傳入下一個(gè)翻轉(zhuǎn)函數(shù),然后再翻轉(zhuǎn)當(dāng)前Head,并且連接上第k+1個(gè)結(jié)點(diǎn)。
- 題目不難,但是要注意考慮邊界條件,還有由于鏈表性質(zhì)導(dǎo)致的問(wèn)題(指針丟失、弄混等)。
更新 - 精簡(jiǎn)版
/*** 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 個(gè)的情況if(lastNode == null) {return head;}}// 1. 先繼續(xù)往后走ListNode nextHead = null;if(lastNode.next != null) {nextHead = reverseKGroup(lastNode.next, k);}// 2. 翻轉(zhuǎn)當(dāng)前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;} }三刷 - 再更新版
- 有一說(shuō)一,感覺(jué)這個(gè)更新 nice 多了!
總結(jié)
以上是生活随笔為你收集整理的【LeetCode笔记】25. K个一组翻转链表(Java、链表、递归)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python分配 使最大的最小_pyth
- 下一篇: html中如何写平方根等,平方根的符号怎