如何写好链表代码

正确理解引用的含义

将某个变量赋值给引用,实际上就是将这个变量的地址赋值给引用,或者反过来说引用中存储了这个变量的内存地址,指向了这个变量,通过引用就能找到这个变量。

p.next=q

这行代码是说,p 结点中的 next 存储了 q 结点的内存地址

p->next=p->next->next

这行代码表示,p 结点的 next 指针存储了 p 结点的下下一个结点的内存地址

警惕引用丢失和内存泄漏

 我们希望在结点 a 和相邻的结点 b 之间插入结点 x,假设当前引用 p 指向结点 a。

p.next = x;  // 将p的next指向x结点;
x.next = p.next;  // 将x的结点的next指向b结点;

p.next 在完成第一步操作之后,已经不再指向结点 b 了,而是指向结点 x。

第 2 行代码相当于将 x 赋值给 x.next,自己指向自己。

因此,整个链表也就断成了两半,从结点 b 往后的所有结点都无法访问到了。

对于有些语言来说,比如 C 语言,内存管理是由程序员负责的,如果没有手动释放结点对应的内存空间,就会产生内存泄露。

所以,我们插入结点时,一定要注意操作的顺序,同理,删除链表结点时,也一定要记得手动释放内存空间,否则,也会出现内

存泄漏的问题。

对于像 Java 这种虚拟机自动管理内存的编程语言来说,就不需要考虑这么多了。

发布了91 篇原创文章 · 获赞 22 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42006733/article/details/104308995