了解名为“分区”的链表算法中的无穷循环

时间:2018-12-23 11:44:12

标签: java singly-linked-list

我正在尝试解决“破解编码面试”一书中的“ 2.4分区”问题:   问题:给定一个链表和一个值x,对它进行分区,以使所有节点  小于x的节点位于大于或等于x的节点之前。

它以某种方式陷入无限循环。本书的解决方案与我的解决方案略有不同(对本书的解决方案进行了评论)。我试图了解为什么书中的解决方案有效而我的解决方案无效。

public static Node particion(Node node, int x) {

    Node beforeStart = null;
    Node beforeEnd = null;
    Node afterStart = null;
    Node afterEnd = null;

    while (node != null) {

//      Node next = node.next;

//      node.next = null;

        if (node.data < x) {
            if(beforeStart == null) {
                beforeStart = node;
                beforeEnd = beforeStart;
            } else {
                beforeEnd.next = node;
                beforeEnd = node;
            }
        } else {
            if(afterStart == null) {
                afterStart = node;
                afterEnd = afterStart;
            } else {
                afterEnd.next = node;
                afterEnd = node;
            }
        }
//      node = next;

        node = node.next;
    }

    if(beforeStart == null) {
        return afterStart;
    }

    beforeEnd.next = afterStart;
    return beforeStart;
}

输入:3 5 8 5 10 2 1(分区= 5) 输出:3 2 1 5 8 5 10

相反,我无尽的输出是: 3 2 1 5 8 5 10 2 1 5 8 5 10 2 1 5 8 5 10 2 1 5 8 5 10(等)

0 个答案:

没有答案