对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变。
给定一个链表的头结点head,同时给定阈值val,请返回一个链表,使小于等于它的结点在前,大于等于它的在后,保证结点值不重复。
测试样例:
{1,4,2,5},3
{1,2,4,5}
代码如下:
package lianbiao;
public class lianbiaofenhua {
public static void main(String[] args) {
ListNode l1 = new ListNode(3);
ListNode l2 = new ListNode(2);
ListNode l3 = new ListNode(1);
ListNode l4 = new ListNode(2);
ListNode l5 = new ListNode(5);
ListNode l6 = new ListNode(6);
l1.next = l2;
l2.next = l3;
l3.next = l4;
l4.next = l5;
l5.next = l6;
ListNode l = lianbiaofenhua.listDivide(l1, 2);
while (l != null) {
System.out.print(l.val + " ");
l = l.next;
}
}
public static ListNode listDivide(ListNode head, int val) {
ListNode pro = new ListNode(0);
ListNode p = pro;
ListNode mid = new ListNode(0);
ListNode m = mid;
ListNode las = new ListNode(0);
ListNode l = las;
while (head != null) {
if (head.val < val) {
p.next = new ListNode(head.val);
p = p.next;
} else if (head.val == val) {
m.next = new ListNode(head.val);
m = m.next;
} else {
l.next = new ListNode(head.val);
l = l.next;
}
head = head.next;
}
p.next = mid.next;
m.next = las.next;
return pro.next;
}
static class ListNode {
int val = 0;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
}