1. 程式人生 > 實用技巧 >86. 分隔連結串列(連結串列)

86. 分隔連結串列(連結串列)

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; } }

。。