#include<stdio.h>
#include<stdlib.h>
//#include<string.h>
#include<iostream>
using namespace std;
typedef struct Node{
char ch;
Node * prior;
Node * next;
}Node,* Linklist;
//构建循环双链表
Node * createRoteLinklist()
{
Linklist L=(Node *)malloc(sizeof(Node));
Node *r;char _char;
L->ch='$';r=L;
cin>>_char;
while(_char!='$')
{
Node *s=(Node *)malloc(sizeof(Node));
s->ch=_char;
r->next=s;
s->prior=r;
r=r->next;
cin>>_char;
}
//free(s);
r->next=L;
L->prior=r;
return L;
}
Node* insertNode(char ch,Node * rear,Linklist L)
{
Node *s=(Node *)malloc(sizeof(Node));
s->ch=ch;
rear->next=s;
s->prior=rear;
s->next=L;
L->prior=s;
return rear=rear->next;
}
//头尾同时查找要删除的元素
int deleteNode(char ch,Node *rear,Linklist L)
{
Node *p=L->next;
Node *q=rear;
while(p!=q)
{
if(p->ch==ch||q->ch==ch){
if(p->ch==ch){
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
return 0 ;
}
else if(q->ch==ch){
q->prior->next=q->next;
q->next->prior=q->prior;
free(q);
return 0 ;
}
}
p=p->next;q=q->prior;
}
cout<<"delete Node can not found\n";
return 0;
}
//输出当前链表的情况
void procOutput(Linklist L,Node * rear)
{
Node * p=L->next;
int i=0;
cout<<"当前结点情况为:\n";
while(p!=L)
{
cout<<"ID"<<++i<<":"<<p->ch<<" ";
p=p->next;
}
cout<<"\n";
}
int main()
{
char ch;
Linklist L=createRoteLinklist();
Node * rear=L->prior;
procOutput(L,rear);
cin>>ch;
rear= insertNode(ch,rear,L);//尾部插入一个结点
procOutput(L,rear);
cin>>ch;
deleteNode(ch,rear,L);//删除结点
procOutput(L,rear);
return 0;
}
循环双链表的增删
最新推荐文章于 2025-11-30 19:25:58 发布
本文介绍如何使用C++创建循环双链表,并演示了如何在链表中插入和删除节点,以及如何遍历整个链表。通过实例代码,深入理解循环双链表的实现和基本操作。
805

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



