86. 分隔連結串列(連結串列)
阿新 • • 發佈:2020-08-23
1、題目描述:
https://leetcode-cn.com/problems/partition-list/
給定一個連結串列和一個特定值 x,對連結串列進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。
你應當保留兩個分割槽中每個節點的初始相對位置。
示例:
輸入: head = 1->4->3->2->5->2, x = 3
輸出: 1->2->2->4->3->5
2、思路:
保留相對位置,就是求出左右兩個連結串列,然後連線起來即可。
3、程式碼:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * }*/ class Solution { public ListNode partition(ListNode head, int x) { if (head == null) return null; ListNode lHead = new ListNode(0); ListNode lTail = lHead; ListNode rHead = new ListNode(0); ListNode rTail = rHead; while (head != null) {if (head.val < x) { // 放在lTail後面 lTail.next = head; lTail = head; } else { // 放在rTail後面 rTail.next = head; rTail = head; } head = head.next; } // 這句程式碼不能少 /* * 因為可能出現這樣的情況: * 原連結串列倒數第N個節點A的值是>=x的,A後面所有節點的值都是<x的 * 然後rTail.next最終其實就是A.next*/ rTail.next = null; // 將rHead.next拼接在lTail後面 lTail.next = rHead.next; return lHead.next; } }
。。