单链表向双量表转换(线性表)

单链表向双量表转换(线性表)

时间: 1ms        内存:128M

描述:

假设一个单循环链表,其结点含有三个域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 

提示:

参考答案(内存最优[748]):

#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;  
} 

参考答案(时间最优[0]):

#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;  
} 

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注