老师,您好,我在加入dummyhead后对链表进行遍历和获取不太理解。

来源:4-3 使用链表的虚拟头结点

凉橙2

2019-03-25

在链表头加了dummyhead之后,对链表进行插入的时候,找到的是index位置的前一个节点,也就是说,在for循环结束之后得到的prev就是index位置的前一个节点。同理,在进行获取元素的时候,用的是同样的循环,最后要获取index位置的元素,那么在for循环结束之后得到的cur也是index位置的前一个节点,那么index位置的值就是cur.next.e,可是代码为什么和我想得不一样呢


*插入*

 Node prev = dummyhead;
        for (int i = 0; i < index; i++) {
            prev = prev.next;
        }
        Node node = new Node(e);
        node.next = prev.next;
        prev.next = node;
        size++;
    }


*取值*

 Node cur=dummyhead.next;
        for (int i = 0; i <index ; i++) {
            cur=cur.next;
        }
        return cur.e;

写回答

1回答

liuyubobobo

2019-03-25

因为这两段逻辑,cur和prev的初始值不同。这也是我在这两段逻辑中,使用不同的变量名称的原因。


在插入逻辑中,prev的初始值是dummyHead,即第0个节点之前的节点。所以,我管他叫prev(之前的),在经过index轮循环以后,它指向了第index个元素之前的节点;


在查找逻辑中,cur的初始值是dunnyHEad.next,即第0个节点本身(而非第0各节点之前的节点),所以,我管他叫cur(现在的)。在经过index轮循环之后,它指向了第index个元素所在的节点本身:)


继续加油!:)

0
1
凉橙2
谢谢bobo老师,没看到cur的初值。。
2019-03-25
共1条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程