1.题目
2.思路
模拟-时间O(N),空间O(N)
主要在于读懂题意,注意题目中说不需要保留原始的相对位置。只需要一个链表记录比x小的数字。一个链表记录比x 大或者相等的数字,然后拼接起来就可以。
一般做链表题都会喜欢加上一个哨兵节点, 减少特殊情况的判断。
ListNode dummpy = new ListNode(-1);返回的时候记得返回dummpy.next就行。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
ListNode ans = new ListNode(-1); //小于
ListNode fin = ans;
ListNode ans2 = new ListNode(-1); //大于等于
ListNode fin2 = ans2;
ListNode tail = head;
while(tail != null){
if(tail.val < x){
ans.next = new ListNode(tail.val);
ans = ans.next;
tail = tail.next;
}
else{
ans2.next = new ListNode(tail.val);
ans2 = ans2.next;
tail = tail.next;
}
}
ans.next = fin2.next;
return fin.next;
}
}