【问题标题】:Why can't I just do node = node.next to iterate through linked list?为什么我不能只做 node = node.next 来遍历链表?
【发布时间】:2017-08-07 23:36:22
【问题描述】:

我目前正在做一个破解编码面试问题(2.4),我应该围绕值 x 划分一个链表,这样所有小于 x 的节点都在所有大于或等于 x 的节点之前。但是,我真的很困惑为什么需要一个临时变量“next”以及为什么 node.next 在它下面为空。为什么我不能只在 while 循环结束时执行 node = node.next?

我只是在之前和之后创建两个链表,并在将正确的值放入每个链表后将它们合并在一起。

public static Node partition(Node node, int x) {
    Node beforeStart = null;
    Node beforeEnd = null;
    Node afterStart = null;
    Node afterEnd = null;

    /* Partition list */
    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 = beforeEnd.next;
            }
        } else {
            if (afterStart == null) {
                afterStart = node;
                afterEnd = afterStart;
            } else {
                afterEnd.next = node;
                afterEnd = afterEnd.next;
            }
        }
        node = next;    
    }

    /* Merge before list and after list */
    if (beforeStart == null) {
        return afterStart;
    }

    beforeEnd.next = afterStart;
    return beforeStart;
}

【问题讨论】:

  • 如果您所做的只是遍历列表,node = node.next 就可以了。不过,您不仅仅是在迭代。

标签: java linked-list


【解决方案1】:

为什么我不能只在 while 循环结束时执行 node = node.next?

可以这样做。做完分区后,对于每个列表,需要将最后一个节点的next指针设置为NULL。这将只需要两行代码。

示例代码使用 next = node.next 和 node.next = NULL 在分区过程中终止每个列表,但在这种情况下不需要这样做,因为列表在分区过程之后才需要 NULL 终止符完成了。

【讨论】:

  • 啊,明白了!谢谢你的解释!
【解决方案2】:

您问题中的循环从原始列表的头部删除节点,并将它们附加到前列表或后列表,直到原始列表为空。然后它连接之前和之后的列表。

这很容易解释,也很容易理解。

可以在每次迭代中不使用临时的next 或将node.next 清零,但上述描述将不再适用——不会在每次迭代中从原始列表中删除节点,即之前的列表并且在列表之后不会只包含适当的节点,您对它们执行的操作不是“附加”,节点甚至会出现在多个列表中一段时间​​。

您的算法会突然变得难以描述和理解。这在软件开发中是一件坏事,在编码面试中也是一件坏事。

【讨论】:

  • 非常感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 2021-05-29
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 2023-01-05
相关资源
最近更新 更多