https://leetcode.com/problems/partition-list/
https://leetcode.com/problems/partition-list/
解题思路:
这道题的意思是将小于 x 和大于等于 x 的数分开,但不改变原链表的相对顺序。
用两个 dummy node,一个用来链接小于 x 的节点,一个用来链接大于等于 x 的节点,最后再将大链表接在小链表后面,这样就不会改变相对顺序。并且把大链表的尾节点断开。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode partition(ListNode head, int x) {
if(head == null) return null;
ListNode dummy1 = new ListNode(0);
ListNode dummy2 = new ListNode(0);
dummy1.next = head;
ListNode p = head;
ListNode p1 = dummy1;
ListNode p2 = dummy2;
while (p != null) {
if (p.val < x) {
p = p.next;
p1 = p1.next;
} else {
p2.next = p;
p1.next = p.next;
p = p1.next;
p2 = p2.next;
}
}
// close the list
p2.next = null;
p1.next = dummy2.next;
return dummy1.next;
}
}