小言_互联网的博客

设计算法逆置循环双链表

327人阅读  评论(0)
//设计算法将带头节点循环双链表就地逆置
#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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场