友情提示:打草稿,画图,看题解,补基础,问大佬能解决99%以上的问题!
题目描述:
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
大体思路:
做出两个dummyHead节点,一个节点负责将小于x的原链表元素串联,另一个节点则将大于等于x的原链表元素串联,最后将两个新串联好的链表相连即为结果。
/* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
ListNode dummyHead1= new ListNode(0);
ListNode dummyHead2= new ListNode(0);
ListNode node1=dummyHead1;
ListNode node2=dummyHead2;
while(head!=null){
if(head.val<x){
//★这里必须用node节点表示,因为除了head,只有这一个活动节点,dummyHead是固定住的节点所以不能用!
node1.next=head;
head=head.next;
node1=node1.next;
node1.next=null;
}else{
node2.next=head;
head=head.next;
node2=node2.next;
node2.next=null;
}
}
node1.next=dummyHead2.next;
return dummyHead1.next;
}
}