链接列表添加组合前后位置的元素

时间:2013-10-26 20:57:31

标签: java

我正在编写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;
        }
    }

感谢

1 个答案:

答案 0 :(得分:1)

你的方法名称引起了一些混乱,因为addBack正在添加到列表的开头(并且似乎正确地这样做了),而你显然打算将addFront添加到最后列表。

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

要在最后添加,您需要遍历列表以查找最后一个元素(即具有next == null的元素)并将新项目设置为下一个,替换null。< / p>

或者因为它可能来自您的代码片段,您打算将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;
}