Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将节点添加到链接列表的末尾_Java_List_Linked List_Add - Fatal编程技术网

Java 将节点添加到链接列表的末尾

Java 将节点添加到链接列表的末尾,java,list,linked-list,add,Java,List,Linked List,Add,在将节点添加到链接列表末尾时遇到了一些问题。它似乎只显示我在调用addFirst方法之前添加的最后一个方法。在我看来,在addLast方法中,我试图首先创建节点以将其分配给5,然后对于以下数字,使用while循环将它们分配给链表上的最后一个节点。我有点不明白为什么我不能让我的输出显示5和6 class LinkedList { private class Node { private Node link; private int x;

在将节点添加到链接列表末尾时遇到了一些问题。它似乎只显示我在调用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 = new Node();
请尝试以下操作:

public void addLast(int d)
{
    Node newLast = new Node();
    if (first == null)
    {
        newLast.x = d;
        first = newLast;
        return;
    }
    Node curr = first;
    while (curr.link != null)
    {
        curr = curr.link;
    }
    newLast.x = d;
    curr.link = newLast;
}
该方法将创建一个新节点,并在检查两个条件后将其添加到列表的末尾: 1.If first为null:在这种情况下,列表为空,第一个节点应为空 初始化为您正在创建的新节点,然后它将返回,或者您可以执行以下操作 如果不是的话。 2.如果first不为null:如果列表不是空的,则循环遍历列表,直到 最后引用最后一个节点,然后将其下一个节点设置为 一个你刚刚创建的

如果您想跟踪名为last的列表的尾部,如上文所述,请添加:

last = newLast

在方法的末尾。希望这有帮助

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

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;
    }
}

1“最后一次”的定义在哪里?2 addLast假设您有一个已定义的列表。如果您的问题是它一开始不起作用,最简单的解决方案是在列表为空时使用addLast调用addFirst;就在那下面。我尝试了两种方法,但在第一种方法中没有使用。谢谢,实际上我正在尝试做一些与您所做的非常相似的事情,但我仍然显示5 6 7和反向。我现在明白了。谢谢你的解释我明白了!