【LeetCode笔记】143. 重排链表(Java、链表、栈、快慢指针)
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode笔记】143. 重排链表(Java、链表、栈、快慢指针)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目描述
- 思路 & 代碼
- 更新版:快慢指針 + 翻轉鏈表
題目描述
- 一看題目反序:用棧
- 更新:O(1) 空間復雜度
思路 & 代碼
- 先快慢指針,找到需要入棧的起點,然后逐個入棧
- 然后逐個出棧,進行重排即可
- 注意1:記得對重排后的鏈表結尾進行 Last.next = null 處理,防止成環
- 注意2:奇偶情況要進行處理,可見代碼注釋
- 時間復雜度 O(n) ,空間復雜度 O(n)
更新版:快慢指針 + 翻轉鏈表
class Solution {public void reorderList(ListNode head) {// 0. 特殊情況if(head == null || head.next == null) {return;}// 1. 快慢指針,劃分出兩段(注意第一段結尾的 next 置空,用 slowPreListNode slow = head, fast = head;ListNode slowPre = null;while(fast != null && fast.next != null) {slowPre = slow;slow = slow.next;fast = fast.next.next;}// 奇數,slow 為中間節點(奇偶情況處理)if(fast != null) {slowPre = slow;slow = slow.next;}// 2. 第二段的翻轉slowPre.next = null;ListNode pre = null;while(slow != null) {ListNode nextNode = slow.next;slow.next = pre;pre = slow;slow = nextNode;}// 3. 合并兩段鏈表fast = head;while(pre != null) {ListNode temp1 = fast.next;ListNode temp2 = pre.next;fast.next = pre;pre.next = temp1;fast = temp1;pre = temp2;}} }總結
以上是生活随笔為你收集整理的【LeetCode笔记】143. 重排链表(Java、链表、栈、快慢指针)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 启动服务同时传递数据,A
- 下一篇: 字符串的地址_面试题:我有一批IPv6地