首页 > 代码库 > 算法--链表的分化

算法--链表的分化

转载请标明出处http://www.cnblogs.com/haozhengfei/p/c4d685012a2e7a9d2a29531f249be630.html 


链表的分化

技术分享
技术分享
技术分享
技术分享
链表的分化练习

第5节 链表的分化练习题

 

对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变。

给定一个链表的头结点head,同时给定阈值val,请返回一个链表,使小于等于它的结点在前,大于等于它的在后,保证结点值不重复。

测试样例:
{1,4,2,5},3
{1,2,4,5}
 
 
 
 
 
1
import java.util.*;
2

3
/*
4
public class ListNode {
5
    int val;
6
    ListNode next = null;
7

8
    ListNode(int val) {
9
        this.val = val;
10
    }
11
}*/
12
public class Divide {
13
    public ListNode listDivide(ListNode head, int val) {
14
        ListNode smallHead = null, smallTail = null;
15
        ListNode bigHead = null, bigTail = null;
16

17
        ListNode next = null;
18
        while (head != null) {
19
            next = head.next;
20
            head.next = null;
21
            if (head.val <= val) {
22
                if (smallHead == null) {
23
                    smallHead = head;
24
                    smallTail = head;
25
                } else {
26
                    smallTail.next = head;
27
                    smallTail = head;
28
                }
29
            } else {
30
                if (bigHead == null) {
31
                    bigHead = head;
32
                    bigTail = head;
33
                } else {
34
                    bigTail.next = head;
35
                    bigTail = head;
36
                }
37
            }
38
            head = next;
39
        }
40
        // 拼接
41
        if (smallTail != null)
42
            smallTail.next = bigHead;
43
        return smallHead == null ? bigHead : smallHead;
44
    }
45
}
 
 
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例
 

算法--链表的分化