单链表和顺序表有何不同?
本质上Lnode * L 和 LinkList L是一样的,有时为了更好的可读性会特意选择其中一种表示方法
---一般来说,带头节点的单链表更为常用---
T(n)= O(1)
书上的算法同上(新结点s已经申请好了)
思路同上,可以通过头结点循环遍历找到前驱(时间复杂度O(n)),也可以“偷天换日”,将p的数据复制到新结点t中,free(q),复杂度O(1)
!但是这个技巧在删除操作中存在一个bug,如果p是最后一个节点,下一结点为null,其next拿不到值,因此需要单独编写逻辑通过循环遍历取到前驱结点
从这也能看出单链表的局限性:只允许单向检索
知识小结
知识小结
可以直接调用之前的插入函数,每次在表尾处插入,缺点是每次都要从头遍历找到表尾,时间复杂度为O(n^2),可通过设置表尾指针优化
---建议养成初始化的好习惯,因为内存将一块空间分配给我们时是不会对其中的“脏数据”进行“清扫”的,如果忘记初始化而直接使用其中遗留的旧数据可能会导致意想不到的后果---
tips:头插法在链表的逆置中有重要应用
最后,无论是头插法还是尾插法,核心都是初始化操作和指定位置的后插(头结点后插为头插,尾结点后插为尾插)
原文:https://www.cnblogs.com/potofsalt/p/14619684.html