给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入:head = 1->4->3->2->5->2, x = 3
输出:1->2->2->4->3->5
2. 标签
链表
双指针
3. 解法 - 双指针
3.1 Java
classSolution {publicListNodepartition(ListNode head,int x) {// 双指针// left 链表储存小于 x 的结点ListNode left =newListNode(0);// left 会不停地移动,由于后面还需要用到所以使用 leftTmp 记下初始位置ListNode leftTmp = left;// right 链表储存大于等于 x 的结点ListNode right =newListNode(0);// right 会不停地移动,由于后面还需要用到所以使用 rightTmp 记下初始位置ListNode rightTmp = right;// 遍历链表while (head !=null) {// 小于 x 的结点全部放到 left 链表中if (head.val< x) {left.next= head; left =left.next; } else {// 大于等于 x 的结点全部放到 right 链表中right.next= head; right =right.next; }// head 移向下一个结点 head =head.next; }// 把两个链表串起来即可right.next=null;left.next=rightTmp.next;returnleftTmp.next; }}