删除链接列表中的元素

时间:2019-06-05 15:14:32

标签: java linked-list

我实现了一个链表,每次调用一个函数时,它们的元素就会放在列表的前面,例如:

30-->40
|
first

//add 50

30-->40-->50
|
first

我实现的代码如下:

public class Node {
    public int elem;
    Node next;
    public Node(int e){
        this.elem=e;
    }
}

public class List {
    Nodo list;
    Nodo first;
    public void addFront(int n){
        Nodo temp=new Nodo(n);
        if (list==null){
            first=temp;
        }
        else{
            list.next=temp;
        }
        list=temp;
    }

    public void print(){
        Nodo current;
        current=first;
        while (current!=null){
            System.out.println(current.elem);
            current=current.next;
        }
    }
    public Nodo deletefirst(){
        first=first.next;
        return list;
    }
public int size(){
        Nodo temp;
        temp=first;
        int c=0;
        while (temp!=null){
            c++;
            temp=temp.next;
        }
        return c;
    }

当我执行以下操作时,我的问题出在主程序中:

List list4=new List();
list4.addFront(10);
list4.addFront(20);
list4.addFront(40);
list4.addFront(60);
list4.addFront(80);
for (int i=0;i<list4.size();i++){
    List4.deletefirst();
    System.out.println("List");
    List4.print();
}

可视化的列表如下:

list
20
40
60
80
list
40
60
80
list
60
80

我该如何更改代码,以便打印出列表的缺失值,

list
80
list
null

有帮助吗?

3 个答案:

答案 0 :(得分:1)

要添加到列表的前面:

public class List {
    Nodo first;

    public void addFront(int n){
        Nodo temp = new Nodo(n);
        temp.next = first;
        first = temp:
    }

first通常被命名为head,如“列表头”。

只需一个字段即可指向第一个节点。

调试代码最好通过心智执行在纸上完成。

答案 1 :(得分:1)

将for循环更改为while循环。

List list4=new List();
list4.addFront(10);
list4.addFront(20);
list4.addFront(40);
list4.addFront(60);
list4.addFront(80);
while (list4.size() > 0){
    list4.deletefirst();
    System.out.println("List");
    List4.print();
}

您正在使用的for循环增加了i,同时减小了列表的大小,该列表很容易出现因1错误或因2错误而导致的错误。

重要的是,我使用了.isEmpty()与<0。这在此代码段中无关紧要,但这是最佳实践。 @azurefrog指出,这是List的自定义实现,没有isEmpty()

答案 2 :(得分:0)

这不是一个正确的答案,但是我没有足够的意见要发表。您可能对迭代器感兴趣。您可能需要将Nodo列表更改为java.util.List,但是您可以真正轻松地声明Iterator<Nodo> it = list4.list.iterator()来使用列表。循环将变为:

while(it.hasNext()){                 
    System.out.println(it.next());
}
System.out.println(it.next());          //outside the loop it.next() point to null