在链表中插入节点

Insert Nodes in the Linked List

我有一个插入方法,可以将节点插入 linked 列表。问题是,每次添加一个节点时,最近添加的节点成为头节点并丢失它之前的节点。如何保留头节点值并将其 link 保存到将要添加的下一个节点?

这是代码

    private Node<D> startOfNode;
    private Node<D> endOfNode;  

    public void insert(D data) throws ListOverflowException {
    Node<D> head = new Node<>(data);
    startOfNode = head;

    if (head.getData() != null) {
        Node<D> node1 = new Node<>(data);
        head.setNext(node1);
        endOfNode = node1;
    }
}

我使用这种打印方式:

public void printList() {
    Node<D> curr = startOfNode;
    int counter = 0;

    while(curr!=null) {
        System.out.println("Item " + counter + " :" + curr.getData());
        curr = curr.getNext();
        counter++;
    }
    System.out.println("Item " + counter + " :" + null);
}

这两种方法属于同一个class。我使用测试器 class 并实例化所述 class.

当我尝试添加两个值为 20 和 30 的节点时,我得到了这个结果:
项目 0 :30
项目 1 :30

但应该是:
项目 0 :20
项目 1 :30

每次在插入方法中添加数据时,您都在重置头部。

您可以从起始节点开始迭代,当您发现下一个节点为空时,您可以添加一个新节点并将其附加到当前节点的下一个节点,只更新结束节点。

或者您可以转到端节点并使用传递的值附加一个新节点。

一个简单的方法如下所示:

private Node head;
private Node tail; 

public void insert(int data){
    Node newNode = new Node(data); //Create
        
    if(tail != null) { //Link
        tail.next = newNode;
    }       
        
    if(head == null) {  //Update head.
        head = newNode;
    }
        
    tail = newNode;  //Update tail.
}

你不应该在插入时重置头部。下面的代码应该可以正常工作:

    private Node<D> startOfNode;
    private Node<D> endOfNode;  

    public void insert(D data) throws ListOverflowException {
    iterator = startOfNode;
     
    if(iterator == null) {
    startOfNode = new Node<D>(data);
    endOfNode = startOfNode;
    return;
    }
    while(iterator.getNext() != null) {
        iterator = iteartor.getNext()
       }
   Node<D> end = new Node<>(data);
   iterator.setNext(end);
   endOfNode = end;
   }