当前位置:   article > 正文

链表-双向循环链表【C语言】_循环双链表删除尾节点时间复杂度

循环双链表删除尾节点时间复杂度

        双向循环链表是最优链表,能补齐单链表的缺点,是个结构复杂,操作简单的链表。其插入和删除节点的时间复杂度是O(1)。


双向链表

        和单链表不同的是双向链表有两个指针,一个指向下一个节点,一个指向上一个节点

  1. typedef int LTDataType;
  2. typedef struct ListNode
  3. {
  4. LTDataType _data;
  5. struct ListNode* _next;
  6. struct ListNode* _prev;
  7. }ListNode;

 

PS:一般建立此链表,要使用哨兵位来简化操作,链表的哨兵位的_pre指向尾节点,尾结点是_next指向哨兵位。

打印链表:

        因为此链表尾结点没有置空,所以无法判断尾结点。但是因为其哨兵位不存数据,所以可以判断节点是否为哨兵位来退出循环。

  1. void ListPrint(ListNode* pHead)
  2. {
  3. assert(pHead);
  4. ListNode* cur = pHead->_next; //这里传入哨兵位的下一个
  5. while (cur!=pHead) {
  6. printf("%d ->
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/655398
推荐阅读
相关标签
  

闽ICP备14008679号