1. 程式人生 > 其它 >【LeetCode】86. Partition List 分隔連結串列(Medium)(JAVA)每日一題

【LeetCode】86. Partition List 分隔連結串列(Medium)(JAVA)每日一題

技術標籤:LeetCode 每日一題連結串列javaleetcode面試演算法導論

【LeetCode】86. Partition List 分隔連結串列(Medium)(JAVA)

題目地址: https://leetcode.com/problems/partition-list/

題目描述:

Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.

Example:

Input: head = 1->4->3->2->5->2, x = 3
Output: 1->2->2->4->3->5

題目大意

給定一個連結串列和一個特定值 x,對連結串列進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。

你應當保留兩個分割槽中每個節點的初始相對位置。

解題方法

  1. 用兩個連結串列分別儲存比 x 小的數和比 x 大的數
  2. 最後把兩個連結串列合起來即可
class Solution {
    public ListNode partition(ListNode head, int x) {
        ListNode small = new ListNode();
        ListNode smallPre = small;
        ListNode big = new ListNode();
        ListNode bigPre = big;
        while (head != null) {
            ListNode next = head.next;
            head.next = null;
            if (head.val < x) {
                smallPre.next = head;
                smallPre = head;
            } else {
                bigPre.next = head;
                bigPre = head;
            }
            head = next;
        }
        smallPre.next = big.next;
        return small.next;
    }
}

執行耗時:0 ms,擊敗了100.00% 的Java使用者
記憶體消耗:37.8 MB,擊敗了50.35% 的Java使用者

歡迎關注我的公眾號,LeetCode 每日一題更新