为什么我不能在这个链表问题中直接使用head而不是初始化并使用ptr?

问题描述 投票:0回答:1

当我遇到这个疑问时,我正在研究这个实现双向链表的解决方案

public class Solution
{
    public static Node constructDLL(int []arr) {
        Node head = new Node(arr[0]);
        Node ptr = head;
        for(int i = 1; i<arr.length; i++) {
            Node node = new Node(arr[i]);
            ptr.next = node;
            node.prev = ptr;
            ptr = node;
        }
        return head;
    }
}

为什么我不能在这个链表问题中直接使用head而不是像这样初始化并使用ptr?

public class Solution
{
    public static Node constructDLL(int []arr) {
        Node head = new Node(arr[0]);
  
        for(int i = 1; i<arr.length; i++) {
            Node node = new Node(arr[i]);
            head.next = node;
            node.prev = head;
            head= node;
        }
        return head;
    }
}

如果ptr引用head,为什么返回ptr返回一个值,而返回head则返回数组中的所有值?我是链表新手,这些事情让我非常困惑。

java data-structures linked-list doubly-linked-list
1个回答
1
投票

如果您在第一个解决方案中执行

return ptr
而不是
return head
,您实际上会执行与第二个解决方案相同的操作。当然,您在
return
语句中使用的变量名称并不重要;重要的是您返回的节点(引用)。

因此很明显,通过该修改,您将返回附加到列表中的 last 节点(请参阅循环的最后一次迭代)。该节点的

next
字段仍为
null
。调用者必须通过
prev
引用导航回到头部才能最终找到它。

© www.soinside.com 2019 - 2024. All rights reserved.