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

java实现中的单链表,无限打印输出?,java,data-structures,Java,Data Structures,在下面的代码中,我试图实现一个单链接列表,在列表的开头添加元素。为什么我无限地得到“5”作为输出? 有人能帮忙解决这个问题吗?显示列表的正确实现应该是什么 类别1:- package linkedList; public class SinglyLinkedList { private int data; private SinglyLinkedList next; public int getData() { return data; }

在下面的代码中,我试图实现一个单链接列表,在列表的开头添加元素。为什么我无限地得到“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();


    }
}

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

问题在于要插入列表中的对象,即插入两次的对象。这意味着:

  • data
    字段将始终具有您使用
    setData()
    设置的最后一个值
  • 由于
    next
    字段指向同一个节点,因此会得到一个循环
  • 解决方案:


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

    在debugger下一步一步地运行代码,您就会看到原因。提示:您的列表应该有两个元素,但您只分配一个。在调试器中逐步执行代码时,请仔细检查对象及其字段的值。PS。将您的类重命名为
    SinglyLinkedList
    Node
    ,因为它是:列表中的一个节点,而不是列表。非常感谢yurib,我错过了这一点:(