算法--链表的分化

Posted 日月的弯刀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法--链表的分化相关的知识,希望对你有一定的参考价值。

转载请标明出处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
}
 
 
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例
 

以上是关于算法--链表的分化的主要内容,如果未能解决你的问题,请参考以下文章

编程算法 - 有序双循环链表的插入 代码(C)

C语言反转单向链表的代码

java数据结构与算法:java代码模拟带头节点单向链表的业务

代码随想录算法训练营第四天 | 24.两两交换链表中的节点19.删除链表的倒数第N个节点160.相交链表142.环形链表II

数据结构与算法—— * 双向链表 *

算法题 14 LeetCode 147 链表的插入排序