【问题标题】:Why is new Node is not added?为什么没有添加新节点?
【发布时间】:2020-10-01 16:18:11
【问题描述】:
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() 方法中,我将“节点”分配给值为 null 的项目,但是,怀疑甚至 n.next 变为 null 它仍然是一个节点,因为定义了“下一个”作为一个节点,所以它应该可以正常工作。

【问题讨论】:

  • 您从未真正更改过列表。您只需创建一个新节点,将其放在一边,然后按顺序查看列表中的所有元素。如果您希望更改数据结构的内容,则需要在某处实际更改一些指针。
  • 我不明白你的说法!你能用简单的方式解释一下吗
  • 优素福打败了我。他的答案是我正在输入的内容。

标签: java oop linked-list nodes


【解决方案1】:

要将新节点添加到链表的末尾,您需要采取以下步骤:

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

【讨论】:

  • 加上head == null 的特殊情况(即当我们将第一个元素添加到列表中时)。但除此之外,这看起来不错。
  • @SilvioMayolo 是的,你是对的。感谢您指出这一点。
  • 但问题是即使它的值为 null 它仍然是一个节点,对吗?所以我们应该能够为其分配一个新节点
  • @GauravRajput 你需要问自己一个问题:“我需要做什么才能在链表的末尾添加一个节点?”。答案是您需要将最后一个节点的next 设置为新节点,但n != null 条件的问题是当循环结束时,nnull 所以n = node 意味着不是添加链表中的新节点,您将新节点的引用保存在n 中,其类型为Node
猜你喜欢
  • 2011-10-13
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多