gpt4 book ai didi

java - 将节点添加到链表末尾

转载 作者:行者123 更新时间:2023-12-02 05:53:28 24 4
gpt4 key购买 nike

将节点添加到链接列表的末尾时遇到一些问题。它似乎只显示我在调用 addFirst 方法之前添加的最后一个。对我来说,在 addLast 方法中,我尝试首先创建节点并为其分配 5,然后对于以下数字,使用 while 循环将它们分配给链表上的最后一个节点。不太明白为什么我无法让输出显示 5 和 6。

class LinkedList
{
private class Node
{
private Node link;
private int x;
}
//----------------------------------
private Node first = null;
//----------------------------------
public void addFirst(int d)
{
Node newNode = new Node();
newNode.x = d;
newNode.link = first;
first = newNode;
}
//----------------------------------
public void addLast(int d)
{
first = new Node();
if (first == null)
{
first = first.link;
}
Node newLast = new Node();
while (first.link != null)
{
first = first.link;
}
newLast.x = d;
first.link = newLast;
first = newLast;
}
//----------------------------------
public void traverse()
{
Node p = first;
while (p != null)
{
System.out.println(p.x);
p = p.link;
}
}
}
//==============================================
class test123
{
public static void main(String[] args)
{
LinkedList list = new LinkedList();
list.addLast(5);
list.addLast(6);
list.addLast(7);
list.addFirst(1);
list.addFirst(2);
list.addFirst(3);
System.out.println("Numbers on list");
list.traverse();
}
}

我还尝试创建最后一个节点,并在遍历方法中使用单独的循环来遍历最后一个节点。我最终得到了相同的输出!

   public void addLast(int d)
{
Node newLast = new Node();
while (last.link != null)
{
last = newLast.link;
}
newLast.x = d;
newLast.link = last;
last = newLast;
}

最佳答案

你的addLast方法的逻辑是错误的。您的方法在每次调用时都重新分配 first ,逻辑从该点开始就崩溃了。此方法将为 last 创建节点,如果列表为空,只需将 first 分配给新节点 last。如果 first 不为空,它将遍历列表,直到找到具有空链接的节点并为该节点链接进行分配。

public void addLast(int d) {
Node last = new Node();
last.x = d;

Node node = first;
if (first == null) {
first = last;
} else {
while (node.link != null) {
node = node.link;
}
node.link = last;
}
}

关于java - 将节点添加到链表末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23331507/

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