今天咱们来看看双链表,也就是双向链表,可以访问上一个访问上一个节点的数据,这不解决了单链表在pos位置前插入的问题嘛
带头双向循环链表
首先定义双链表节点呗,包含上一个节点指针,下一个节点指针,和所存储数据
然后写一个创建节点的函数,后面儿插入节点时,用着就会十分方便,这儿我省略了对newnode的判断,一般他都是创建成功的,但是尽量加上呢
下面儿咱创建一个头节点,也就是哨兵卫,带上头节点的话,有重要的两个优势
①可以避免用二级指针,因为咱们传参数可以直接传指针也指向哨兵卫,这时候不需要改变他本身的指向~只需要改他的成员,(例如头插一个数据,只需要让哨兵卫的->next指向那个新节点),因此只需要传一级指针。
②避免了空指针的判断,和边界问题,因为有哨兵卫,所以永远不会为空
双向链表的销毁就比较简单,得先断言,哨兵卫不能为空昂,不然就是传错值了呢,然后从哨兵卫的next开始释放,最后再释放哨兵卫,记得置空哦~避免野指针

双链表的尾插这块儿比较简单,记得末尾数据的后驱节点是哨兵卫就行(这块儿还需要遍历双链表找尾吗?!根本不需要!pHead->prev就是尾!所以这块儿的while很冗余)
双链表的尾删,这一块儿,一定要判断一下是不是空链表呢~(第二个断言assert),空链表就不能删啦,还有记得释放删掉的空间!

双链表的头插~
双链表滴头删,也要注意!不能是空链表昂,这块儿链表判空就是他的哨兵卫下一个不能是哨兵卫。

双链表的查找,这块儿记得带返回值昂
在pos位置前插入!看吧,这次就不需要定一个指针,再从头找啦,直接pos->prev,十分方便啦!
所以!双链表就是纸老虎,不要怕,他十分十分十分!简单!个人觉得双链表比单链表还简单!
3387

被折叠的 条评论
为什么被折叠?



