为什么不添加新节点


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,所以它应该正常工作。

要在链表末尾添加新节点,需要执行以下步骤:

  1. 创建新节点
  2. 检查链表是否为空。如果是,则将head指向新节点并从函数返回
  3. 如果链表不为空,则遍历链表直到到达最后一个节点
  4. 将最后一个节点的next指向在步骤1中创建的新节点

问题

你的代码中有几个问题:

  1. 您没有处理在空链表中添加新节点的特殊情况
  2. 当到达最后一个节点时,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;
}

相关内容

  • 没有找到相关文章

最新更新