Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
For example,
Given 1->4->3->2->5->2
and x = 3,
return 1->2->2->4->3->5
.
题意:给定一个链表和一个目标值X,使得链表一分为二,即小于X的所有节点都放在大于或等于X的节点之前,并且保留节点原有的相对顺序不变
解题思路:使用两个dummy节点,遍历原链表时,遇到小于X的节点,将其存储在dummy1中,遇到大于等于X的节点,将其存储在dummy2中。最后将dummy2链接到dummy1后。返回dummy1.next
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode partition(ListNode head, int x) {
//存储小于目标值的节点
ListNode dummy1 = new ListNode(0);
ListNode head1 = dummy1;
ListNode dummy2 = new ListNode(0);//存储大于目标值的节点
ListNode head2 = dummy2;
ListNode curNode = head;
while (curNode != null) {
ListNode nextNode = curNode.next;
if (curNode.val < x) {
head1.next = curNode;
head1 = head1.next;
head1.next = null;
}else {
head2.next =curNode;
head2 = head2.next;
head2.next = null;
}
curNode = nextNode;
}
head1.next = dummy2.next;
return dummy1.next;
}
}