问题
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
例子
思路
-
方法1
新创一个链表,遍历原链表,后插法用新链表保存所有<x的结点,并删除原来链表的所有<x的结点
要点:既然删除结点,则必须设置一个头节点,和pre指针 -
方法2
代码
//方法1
class Solution {
public ListNode partition(ListNode head, int x) {
if(head==null || head.next==null) return head;
ListNode h = new ListNode(-1);
h.next = head;
ListNode h1=h,h2=h.next;
ListNode hh = new ListNode(-1);
ListNode cur = hh;
while(h2!=null) {
if(h2.val<x){
ListNode temp = h2.next;
cur.next=h2;
cur=cur.next;
h2=temp;
h1.next = temp;
}else{
h1=h1.next;
h2=h2.next;
}
}
cur.next = h.next;
return hh.next;
}
}
//方法2