leetcode86.分隔链表
大体的思路是不断向后遍历找到节点值小于x的,然后把他置换到整个链表的前方
具体实现是先利用左指针找到原链表第一个不小于x的节点的前一个节点;然后右指针以此为起点,找到下一个节点值小于x的,然后把下一个节点抽到左值针的下一个节点;直到遍历完整个链表
/*** 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) {//1.添加虚拟头节点然后找到第一个不小于x节点的前一个节点ListNode dummyHead = new ListNode(Integer.MIN_VALUE, head);ListNode left = dummyHead, right = dummyHead;while (left.next != null && left.next.val < x) {left = left.next;}right = left;//2.利用右指针找到小于x的节点然后放置到整个链表的左边while (right.next != null) {if (right.next.val < x) {ListNode temp = right.next;right.next = temp.next;temp.next = left.next;left.next = temp;left = left.next;} else {right = right.next;}}return dummyHead.next;}
}