public class LinkedList {
static Node head;
static class Node{
int data;
Node next;
Node(int dat){
data = dat;
next = null;
}
}
public void add(int data){
Node node = new Node(data);
Node n = head;
while (n!= null){
n = n.next;
}
n = node;
}
public void print(){
Node n = head;
while(n!=null){
System.out.println(n.data);
n = n.next;
}
}
}
我意识到,在add((方法中,我将"node"分配给一个值为null的项,然而,怀疑甚至是n.next变为null,它仍然是一个节点权限,因为"next"被定义为node,所以它应该正常工作。
要在链表末尾添加新节点,需要执行以下步骤:
- 创建新节点
- 检查链表是否为空。如果是,则将
head
指向新节点并从函数返回 - 如果链表不为空,则遍历链表直到到达最后一个节点
- 将最后一个节点的
next
指向在步骤1中创建的新节点
问题
你的代码中有几个问题:
- 您没有处理在空链表中添加新节点的特殊情况
- 当到达最后一个节点时,
add()
方法中的while
循环不会停止。只有当n
本身变为null
时,它才会停止,这意味着您无法在链表中添加新节点
溶液
您需要从更改while
循环中的条件
n != null
至
n.next != null
要确保循环结束后您位于链接列表中的最后一个节点,然后在链接列表中添加新节点,您需要将最后节点的next
指向新节点
n.next = node;
您的add()
方法应该写成:
public void add(int data) {
Node node = new Node(data);
if (head == null) {
head = node;
return;
}
Node n = head;
while (n.next != null){
n = n.next;
}
n.next = node;
}