【问题标题】:Custom Linked List in JavaJava中的自定义链表
【发布时间】:2021-08-20 08:33:30
【问题描述】:

我正在尝试实现我自己的添加和删除节点的 LinkedList 类。我面临的唯一问题是,当我尝试打印链表的所有节点时,由于我的 while 循环,我无法打印最后一个节点。我不确定如何删除此错误/错误。

public class LinkedList {
    private Node head;

    public static void main(String[] args) {
        LinkedList list = new LinkedList();

        list.insert(5);
        list.insert(10);
        list.insert(13);
        list.insert(15);
        list.insert(20);

        list.show();

        list.delete(13);
        list.show();
    }

    public void insert(int val) {
        Node node = new Node(val);
        node.next = null;
        if (head == null) {
            head = node;
        } else {
            Node temp = head;
            while (temp.next != null) {
                temp = temp.next;
            }
            temp.next = node;
        }
    }

    public void delete(int val) {
        Node temp = head, prev = null;

        if (temp != null && temp.val == val) {
            head = temp.next;
            return;
        }

        while (temp != null && temp.val != val) {
            prev = temp;
            temp = temp.next;
        }
        if (temp == null) return;
        
        prev.next = temp.next;
    }

    public void show() {
        Node temp = head;
        while (temp.next != null) {
            System.out.print(temp.val + " ");
            temp = temp.next;
        }
        System.out.println();
    }

    private class Node {
        Node next;
        int val;

        private Node(int val) {
            this.val = val;
        }
    }

}

【问题讨论】:

  • 提示:弄清楚“为什么我的代码没有按照我的预期做”是学习编程的关键部分。所以:您的第一步是能够跟随您的代码正在做什么。您可以通过 A)学习如何使用调试器(使用 intellij 或 eclipse 等 IDE 非常容易)或 B)通过简单地添加 PRINT 语句来实现。然后,对于这么小的代码也很有帮助:拿一张纸和一支笔。然后在心里“运行”你的代码。写下变量名,然后写下发生了什么变化等。
  • 不客气。

标签: java linked-list


【解决方案1】:

根据您的代码,我只关注您的 show() 方法,因此您可以更改如下:

 public void show() {
        Node temp = head;
        while (temp != null) {
            System.out.print(temp.val + " ");
            temp = temp.next;
        }
        System.out.println();
    }

这可以通过调试器轻松捕获。我希望这会帮助你。 如需更多信息,请告诉我。

【讨论】:

    猜你喜欢
    • 2012-07-29
    • 2021-02-27
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 2011-09-24
    • 1970-01-01
    相关资源
    最近更新 更多