gpt4 book ai didi

java - 反向列表实现和指针理解

转载 作者:行者123 更新时间:2023-12-01 17:55:39 26 4
gpt4 key购买 nike

假设我有一个名为 Node 的类:

public class Node {
public Node next;

//etc......
}

和一个 NodesList 类:

public class NodesList {
public Node head;

//etc....
}

现在我想实现一个函数来反转列表,如下所示:

public reverseList () {
Node curr = head;
Node prev = null;

while (curr != null){
curr.next = prev;
prev = curr;
head = head.next;
curr = head;
}

head = prev;
}

我的问题非常基本:我分配了 curr = head

为什么,在作业中curr.next = prev,它不会将head也更改为 head.next = prev 并毁掉列表?

我可以在哪里阅读相关内容以了解更多幕后发生的事情?

非常感谢!!!

最佳答案

currhead 最初指向第一个节点。当您执行 curr.next = prev 时,curr.nexthead.next 均为 null。现在无法反转列表,因为第一个节点与列表其余部分之间的连接丢失。现在,当执行 head = head.next 语句时,您的 head 将指向 null,这意味着列表没有起点.

要记住的一件事是永远不要使用 head 指针在列表中的节点之间移动。 head 应始终指向列表的开头。在反转列表的情况下,head 可以更新为指向反转后列表的新起始节点。

反转列表的一种方法是:

Node prev = null;
Node curr = head;
Node next;

while (curr != NULL)
{
next = curr.next;
curr.next = prev;
prev = current;
current = next;
}
head = prev;

在上面的代码片段中,有一个名为 next 的指针,它将首先指向 current 的下一个节点。所以现在执行完 curr.next = prev 后,curr 可以通过语句 curr = next 移动到链表中的下一个节点进行反转。这确保了列表的连接性不会丢失。

在 while 循环反转列表后,prev 将指向列表的新的第一个节点。现在您可以修改 head 以指向该节点。

关于java - 反向列表实现和指针理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45122898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com