//设计算法将带头节点循环双链表就地逆置
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct slist
{
int data;
struct slist *prior;
struct slist *next;
}list;
void creat_circle_double_list(list *&l);//创建循环双链表 尾插法
void print_circle_double_list(list *&l);//打印循环双链表
void reverse_circle_double_list(list *&l);//逆置循环双链表 头插法
int main(void)
{
list *l;
creat_circle_double_list(l);
reverse_circle_double_list(l);
print_circle_double_list(l);
return 0;
}
void reverse_circle_double_list(list *&l)
{
list *p = l->next ,*q;//q 用来临时保存节点
l->next = l->prior = l;
while(p != l)
{
q = p->next ;
p->next = l->next ;
l->next->prior = p;
l->next = p;
p->prior = l;
p = q;
}
}
void creat_circle_double_list(list *&l)
{
list *r,*s;
l = new list;
r = l;
int x;
cout<<"请输入数据项:"<<endl;
cin>>x;
while(x != 0)
{
s = new list;
s->data = x;
r->next = s;
s->prior = r;
r = s;
cin>>x;
}
r->next = l;
}
void print_circle_double_list(list *&l)
{
if(l->next == l && l->prior == l)
{
cout<<"循环双链表为空";
}
else
{
list *p = l->next ;
while(p != l)
{
cout<<p->data <<" ";
p = p->next ;
}
}
}
转载:https://blog.csdn.net/qq_44653420/article/details/102469387
查看评论