解题思路:
根据题意对链表进行分割
创建链表l用来表示小于给定值x的链表,创建辅助链表left指向l的初始节点
创建链表r用来表示大于等于给定值x的链表,创建辅助链表right指向r的初始节点
创建辅助链表cur,指向head节点
对原链表进行遍历
如果当前节点的val值小于x,left指向节点的下一个节点为当前节点cur,left前进一个节点
如果当前节点的val值大于等于x,right指向节点的下一个节点为当前节点cur,right前进一个节点
遍历完原始链表后,合并两个链表(l和r)
此时将right指向节点的下一个节点指向空,right指向节点即为合并后链表的尾节点,left的下一个节点指向r初始节点的下一个节点。
代码实现:
public ListNode partition(ListNode head, int x) {
ListNode r=new ListNode(0);
ListNode l=new ListNode(0);
ListNode left=l;
ListNode right=r;
ListNode cur=head;
while(cur!=null)
{
if(cur.val<x)
{
left.next=cur;
left=left.next;
}
else
{
right.next=cur;
right=right.next;
}
cur=cur.next;
}
//拼接两个链表
left.next=r.next;
right.next=null;
return l.next;
}