Coding

86. Partition List

2023-08-15 2 min read

⭐⭐⭐

題目敘述

Given the head of 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 1

Input: head = [1,4,3,2,5,2], x = 3 Output: [1,2,2,4,3,5]

Example 2

Input: head = [2,1], x = 2 Output: [1,2]

解題思路

  1. Use two ListNode, less and greater, to hold nodes with values less than x and which node greater than or equal to x.
  2. Linking two ListNode togother, attach the greater to the end of the less.

Solution

// 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 partition(ListNode head, int x) {
        ListNode less = new ListNode(0);
        ListNode lessTail = less;
        ListNode greater = new ListNode(0);
        ListNode greaterTail = greater;
        
        while (head != null) {
            if (head.val < x) {
                lessTail.next = new ListNode(head.val);
                lessTail = lessTail.next;
            } else {
                greaterTail.next = new ListNode(head.val);
                greaterTail = greaterTail.next;
            }
            head = head.next;
        }

        lessTail.next = greater.next;
        return less.next;
    }
}
單字

preserve 保存 v.

to keep something as it is, especially in order to prevent it from decaying or being damaged or destroyed

  • to preserve the environment
  • We want to preserve the character of the town while improving the facilities.
← Posts
meow~