难度中等354
给你一个链表和一个特定值 x
,请你对链表进行分隔,使得所有小于 x
的节点都出现在大于或等于 x
的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入:head = 1->4->3->2->5->2, x = 3 输出:1->2->2->4->3->5
通过次数84,876提交次数136,244
思路:用两个链表,一个存大于等于x的节点,一个存小于x的节点,遍历链表检查值大小,并将节点拆出来链接到对应的链表中,最后再链接小链表和大链表。
通过 | 0 ms | 37.6 MB | Java |
/**
* Definition for singly-linked list.
* 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) {
if(head==null) return head;
ListNode shead,mhead,sp,mp,p=head;
shead=new ListNode(0);
mhead=new ListNode(0);
sp=shead;
mp=mhead;
//比较值
while(p!=null){
if(p.val<x){
sp.next=p;
sp=sp.next;
}else{
mp.next=p;
mp=mp.next;
}
p=p.next;
}
sp.next=null;
mp.next=null;
if(shead.next!=null){
head=shead.next;
sp.next=mhead.next;
}else{
head=mhead.next;
}
//判断head
return head;
}
}