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

标签 java list linked-list addition

将节点添加到链接列表的末尾时遇到一些问题。它似乎只显示我在调用 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/

相关文章:

python - 合并两个列表列表中的每个元素python

list - 如何实现 not_all_equal/1 谓词

python - 将列表转换为字典,列表项作为键,列表索引作为 python 中的值

java - 为什么 setNext 在 add (to front) 方法那里?

c - 为什么在 LinkedList 的这个实现中会出现段错误

java - 如何将数组列表的相等性与现代 Java 进行比较?

java - 在 hibernate 中获取 ClassCastException

java - 如何在检查是否存在 Java 8 Optional 时返回值?

java - 在 WebApplicationInitializer 中加载 ApplicationContext 的层次结构

c - 测量代码的吞吐量和延迟