0

我正在用 Java 编写一个链表的实现。我有两种方法,一种将元素放在列表前面:

public void addFront(int n){
        Node temp=new Node(n);
        if (llist==null){
            first=temp;
        }
        else{
            llist.next=temp;
        }
        llist=temp;
    }

因此,如果我在列表中添加元素,例如:

l1.addFront(1)
l1.addFront(2)
l1.addFront(3)

它将打印:1、2 和 3

现在我有其他方法可以将元素放在后面,如下所示:

public void addBack(int n){
        Node temp=new Node(n);
        temp.next=llist;
        llist=temp;
        first=temp;
    }

因此,如果我添加以下元素:

l1.addBack(4)
l1.addBack(5)
l1.addBack(6)

它将打印 6,5,4;到这里为止一切都很好;问题是当我想对最后一个列表执行以下操作时:

l1.addFront(9)

它只打印 9 和 6,但其他数字都丢失了,这是为什么呢?

我的打印方法是这样的:

public void print(){
        Node curr=first;
        while(curr!=null){
            System.out.println(curr.e);
            curr=curr.next;
        }
    }

谢谢

4

1 回答 1

1

您的方法名称引起了一些混乱,就像addBack添加到列表的开头一样(并且似乎正确地这样做了),并且您显然打算addFront添加到列表的末尾。

您的代码addFront实际上总是将新节点添加为第一个也是唯一的元素或作为第二个元素,替换那里的任何内容。

要在最后添加,您需要遍历列表以找到最后一个元素(即带有 的元素next == null)并将新项目设置为下一个,替换null.

或者可能来自您的代码片段,您打算llist成为列表中的最后一个元素,您需要将其保持在该状态,并使用它而不是如上所述的遍历。

基于您确实希望方法按上述方式执行的假设(尽管它看起来倒退了),并且假设您确实希望将llist字段保持在最后一个元素上,这样您就不需要遍历列表添加到最后,下面的代码应该做到这一点。

public void addFront(int n){
    Node temp=new Node(n);
    if (llist==null){
        first=temp;
    }
    else{
        llist.next=temp;
    }
    llist=temp;
}

public void addBack(int n){
    Node temp=new Node(n);
    temp.next=first;
    first=temp;
    if (llist == null)
        llist = first;
}
于 2013-10-26T21:48:04.613 回答