**题目:**给定一串链表的起始节点head和一个数值x,将链表中所有比X值小的节点放在比X值大的节点的前面,除此之外,要求保持原有的节点排序不变。
例子:
举例1:
输入 :head = [1,4,3,2,5,2], x = 3;
输出 :[1,2,2,4,3,5 ];
举例2:
输入:head = [2,1], x = 2
输出:[1,2]
解题思路:
创建两个链表,分别存储比x小的节点和大于等于x的节点,然后将两个链表重新拼接在一起
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) { ListNode lessListHead = new ListNode(0); ListNode greaterListHead = new ListNode(0); ListNode lessListCurrect = lessListHead; ListNode greaterListCurrect = greaterListHead; //遍历head链表,将head中值比x小的节点放入小的链表中,反之放入另一个链表中 while (head != null) { if (head.val < x) { lessListCurrect.next = head; lessListCurrect = lessListCurrect.next; } else { greaterListCurrect.next = head; greaterListCurrect = greaterListCurrect.next; } head = head.next; } //拼接两个链表 greaterListCurrect.next = null; lessListCurrect.next = greaterListHead.next; return lessListHead.next; } }