有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java实现中的数据结构单链表,无限打印输出?

在下面的代码中,我试图实现一个单链接列表,在列表的开头添加元素。为什么我无限地得到“5”作为输出? 有人能帮忙解决这个问题吗?显示列表的正确实现应该是什么

类别1:-

package linkedList;

public class SinglyLinkedList {

    private int data;
    private SinglyLinkedList next;
    public int getData() {
        return data;
    }
    public void setData(int data) {
        this.data = data;
    }
    public SinglyLinkedList getNext() {
        return next;
    }
    public void setNext(SinglyLinkedList next) {
        this.next = next;
    }


}

第2类:-

package linkedList;
public class SingleLinkedListImpl   {

    public SingleLinkedListImpl() {
        length =0;
    }
    SinglyLinkedList head;
    private int length;

    public SinglyLinkedList getHead() {
        return head;
    }

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }

    public void insertAtBegin(SinglyLinkedList listNode) {

            listNode.setNext(head);
            head = listNode;
            length ++;
    }


    public void showLinkedList(){
        SinglyLinkedList p,q;
        p=head;

        while(p.getNext()!=null){
            System.out.println(p.getData());
            p=p.getNext();
        }

    }

    public static void main(String[] args) {

        SingleLinkedListImpl impl= new SingleLinkedListImpl();
        SinglyLinkedList linkedList= new SinglyLinkedList();
        linkedList.setData(3);

        impl.insertAtBegin(linkedList);
        linkedList.setData(5);
        impl.insertAtBegin(linkedList);

        impl.showLinkedList();


    }
}

共 (2) 个答案

  1. # 1 楼答案

    您对链接列表的实现不一致。您从未为impl设置next。如果您真的想实现这样的链表,那么必须为要添加到linkedlist的每个项目创建一个new SingleLinkedListImpl,并设置next。但是我建议看一看如何创建链表的教程

  2. # 2 楼答案

    问题是您要插入列表中的对象-它是您插入两次的同一个对象。这意味着:

    1. data字段将始终具有您使用setData()设置的最后一个值
    2. 因为next字段指向同一个节点,所以会得到一个循环

    解决方案:

    为添加到列表中的每个节点创建SinglyLinkedList的新实例