给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
方法:遍历法
思路:定义两个新链表,head链表逐个开头遍历,大于等于X和小于X分别放到两个新链表上,然后将两个新链表连在一起即可;
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
return part(head, x);
}
//暴力法
private ListNode part(ListNode head, int x) {
//定义两个头结点连接两个结果链表
ListNode dummyHead1 = new ListNode(0);
ListNode dummyHead2 = new ListNode(0);
ListNode node1 = dummyHead1;
ListNode node2 = dummyHead2;
while (head != null) {
//小于X
if (head.val < x) {
node1.next = head;
head = head.next;
node1 = node1.next;//将该值连到node1
node1.next = null;//去掉当前值后面的部分,只连接一个值
} else {
node2.next = head;
head = head.next;
node2 = node2.next;
node2.next = null;
}
}
node1.next = dummyHead2.next;//将小于部分的尾部和大于等于部分的头部相连
return dummyHead1.next;
}
}