无法从链表类中删除第一个节点

我有一个问题。我正在使用 Cracking the Coding Interview 教科书来练习有关链表的一些面试问题,并在解决问题之前尝试实现自己的 LinkedList 数据结构。我试图测试该类的功能。其他一切都很好,但我不知道如何删除 LinkedList 的第一个节点。


在发现我自己的代码实现不起作用后,我尝试了 CTCI 书中的代码,但无济于事。下面是我的链表数据结构代码:


static class Node{

        Node next = null;

        int data;


        public Node(int d) {

            data = d;

        }


        void appendToTail(int d) {

            Node end = new Node(d);

            Node n = this;

            while(n.next != null) {

                n = n.next;

            }

            n.next = end;

        }


        Node deleteNode(Node head, int d) {

            if(head == null) return null;

            Node n = head;

            if(n.data == d) {

                return head.next;

            }


            while(n.next != null) {

                if(n.next.data == d) {

                    n.next = n.next.next;

                    return head;

                }

                n = n.next;

            }

            return head;


        }


        int size () {

            int length = 0;

            Node n = this;

            if(n == null) {

                return 0;

            } 

            length = 1;

            while(n.next != null) {

                n = n.next;

                length++;

            }


            return length;

        }


        void printNode() {

            Node d = this;

            while(d != null) {

                if(d.next != null) {

                    System.out.print(d.data + " --> ");

                } else {

                    System.out.println(d.data + " ");

                }


                d = d.next;

            }

        }


    }

我想知道为什么我能够删除除第一个节点之外的所有其他节点。


我确实设置了以下测试用例:


public static void main(String[] args) {

        //test cases

        Node test = new Node(0);

        for(int i = 1; i <= 20; i++) {

            test.appendToTail(i);

        }


        test.printNode();


删除所有偶数节点后我收到的输出是0 --> 1 --> 3 --> 5 --> 7 --> 9 --> 11 --> 13 --> 15 --> 17 --> 19但我的预期输出是1 --> 3 --> 5 --> 7 --> 9 --> 11 --> 13 --> 15 --> 17 --> 19。


慕侠2389804
浏览 101回答 1
1回答

忽然笑

问题是,当删除链表中的第一个元素时,您正在发送 head.next 但您没有在测试变量中使用它。代码应该是public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; //test cases&nbsp; &nbsp; &nbsp; &nbsp; Node test = new Node(0);&nbsp; &nbsp; &nbsp; &nbsp; for(int i = 1; i <= 20; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; test.appendToTail(i);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; test.printNode();&nbsp; &nbsp; &nbsp; &nbsp; for(int i = 0; i <= 20; i = i + 2) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; test = test.deleteNode(test, i);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; test.printNode();&nbsp; &nbsp; }添加这个test = test.deleteNode(test, i);那么结果将是0 --> 1 --> 2 --> 3 --> 4 --> 5 --> 6 --> 7 --> 8 --> 9 --> 10 --> 11 --> 12 --> 13 --> 14 --> 15 --> 16 --> 17 --> 18 --> 19 --> 203 --> 5 --> 7 --> 9 --> 11 --> 13 --> 15 --> 17 --> 19&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java