题目描述

思路
- 先分成两个链表,一个里面存大于x的节点,另一个存小于x的节点。然后把两个链表连起来。
- cur指向原链表。
- cur1指向新链表1,用cur1往新链表1后面追加满足条件的节点。
- cur2指向新链表2,用cur2往新链表2后面追加满足条件的节点。
- 注意:如果这里直接用cur1 cur2指向原链表中的元素,不new新的节点的话,要注意及时释放,否则可能造成一个节点被多次指向。
代码
class Solution {
public ListNode partition(ListNode head, int x) {
if (head == null) return head;
ListNode dummy1 = new ListNode();
ListNode dummy2 = new ListNode();
ListNode cur1 = dummy1;
ListNode cur2 = dummy2;
ListNode cur = head;
while (cur != null) {
if (cur.val < x) {
cur1.next = cur;
cur1 = cur1.next;
cur = cur.next;
cur1.next = null;
} else {
cur2.next = cur;
cur2 = cur2.next;
cur = cur.next;
cur2.next = null;
}
}
cur1.next = dummy2.next;
return dummy1.next;
}
}