在链表中插入节点



我有一个插入方法,将节点插入到链表中。问题是,每次添加一个节点时,最近添加的节点都会成为头节点,并丢失之前的节点。如何保留头节点值并将其链接到将要添加的下一个节点?

下面是代码

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);
}

这两个方法都属于同一个类。我使用一个测试器类并实例化这个类。

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

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

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

你可以从startnode开始迭代,当你发现下一个节点为null时,你可以添加一个新节点,并将其附加到当前节点的下一个,只需更新endNode。

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

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

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;
}

最新更新