解题思路:
根据题意对链表进行分割
创建链表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;}