题目描述
假设一个单循环链表,其结点含有三个域pre、data、link。其中data为数据域;pre为指针域,它的值为空指针(NIL);link为指针域,它指向后继结点。请设计算法,将此表改成双向循环链表。
输入
1 3 6 2 3 8 90
输出
1 3 6 2 3 8 90
样例输入
3 5 6 7 8 2 3 4
样例输出
3 5 6 7 8 2 3 4
参考代码
#include<stdio.h>
#include<stdlib.h>
struct f
{
int x;
struct f *prior,*next;
}
;
struct f *p;
int m;
struct f *f1()
{
struct f *head,*p1,*p2;
head=NULL;
while(p1=(struct f *)malloc(sizeof(struct f)),scanf("%d",&p1->x)!=EOF)
{
if(head==NULL)
head=p1; else
p2->next=p1;
p2=p1;
m++;
}
p2->next=NULL;
return head;
}
int main()
{
struct f *p1,*p2,*p;
p=f1();
for (p1=p;p1!=NULL;p1=p1->next )
{
p2=p1->next;
if(p2==NULL)
break;
p2->prior =p1;
p2=p1;
}
p1->next =p;
p->prior =p1;
while(m--)
{
printf("%d ",p->x);
p=p->next;
}
return 0;
}
解析
暂无