这个题是让你把比x小的节点都挪到大于等于x节点前面去,注意还要保证每个节点的初始位置。
那么我们可以先找到第一个>=x的节点p,然后p后面的所有节点,都插入到p之前即可
我的代码写复杂了= =
class Solution {
public ListNode partition(ListNode head, int x) {
ListNode p = head;
boolean flag = false;
if (p != null && p.val >= x) flag = true;
while (p != null && p.next != null) {
if (flag && p.next.val < x) {
ListNode tmp = p.next;
p.next = p.next.next;
head = listNodeInsert(head, tmp, x);
continue;
} else if (p.next.val >= x) {
flag = true;
}
p = p.next;
}
return head;
}
public ListNode listNodeInsert(ListNode head, ListNode node, int x) {
ListNode p = head;
if (p.val >= x) {
node.next = p;
return node;
}
while (true) {
if (p.next == null) {
p.next = node;
node.next = null;
break;
} else if (p.next.val >= x) {
node.next = p.next;
p.next = node;
break;
} else {
p = p.next;
}
}
return head;
}
}