循环双链表删除结点,删除值为num的所有结点 您所在的位置:网站首页 双向链表删除尾结点 循环双链表删除结点,删除值为num的所有结点

循环双链表删除结点,删除值为num的所有结点

#循环双链表删除结点,删除值为num的所有结点| 来源: 网络整理| 查看: 265

循环双链表删除结点,删除值为num的所有结点

关于遍历循环双向链表删除特定结点的问题,我一直没在网上看到能成功的在我的编辑器上运行的代码,于是自己写了一个,逻辑比较啰嗦,但能成功运行,我把几个边界点单独拿出来讨论的。

下面是代码 #include using namespace std; class linknode { public: int data; linknode* next, * prev; linknode(int info = 0, linknode* nextpr = NULL, linknode* prevpr = NULL) { data = info; next = nextpr; prev = prevpr; } }; class linklist { public: linknode* head, * tail; linklist() { head = tail = NULL; } void push(int num) { if (head == NULL) { head = tail = new linknode(num); head->next = NULL; tail->next = head; } else { linknode* p = new linknode(num); tail->next = p; p->prev = tail; tail = p; tail->next = head; } } void deletelinknode(int num) { linknode* p = this->head; linknode* q = p->next; for (; p->next != head; p = q) { q = q->next; if (p->data == num) { if (p == head) { head = p->next; p->next->prev = tail; tail->next = p->next; delete p; } else { p->prev->next = p->next; p->next->prev = p->prev; delete p; } } } if (p == tail) { if (p->data == num) { tail = p->prev; p->prev->next = p->next; p->next->prev = p->prev; delete p; } } } void display() { if (head == tail) { return; //说明没有元素,直接返回即可 } for (linknode* p = head;; p = p->next) { if (p == tail) { cout cin >> value; ll.push(value); } cout value; ll.deletelinknode(value); cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有