在链表中插入节点
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;
}
我有一个插入方法,可以将节点插入 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;
}