这个题目太简单了吧。简单到我以为自己做错了,结果竟然还很不错。可能有严格的限制,比如空间复杂度为O(1)等,但本质上这道题目都不算难。只是我不想费脑子把一个节点从原链表上弄下来,而是重新生成了一个节点。但是道理都是一样的,无非使用两个链表,一个指向始终比它小的,一个指向大于等于它的。然后两个连在一起就行了。代码如下:
public ListNode partition(ListNode head, int x) {
ListNode list1 = new ListNode(-1), result = list1; //存放比x小的
ListNode list2 = new ListNode(-1), result2 = list2; //存放比x大的或等于的
while (head != null) {
if (head.val < x) {
list1.next = new ListNode(head.val); //这里可以变为将这个节点从原链表上弄下来
list1 = list1.next;
}
else {
list2.next = new ListNode(head.val); //这里可以变为将这个节点从原链表上弄下来
list2 = list2.next;
}
head = head.next;
}
list1.next = result2.next;
return result.next;
}