//10.2-7请给出一个O(n)时间的非递归过程,它对含n个元素的单链表的链进行逆转。除了链表本身占用的空间外,该过程应仅使用固定量的存储空间
#include <stdio.h>
#include <stdlib.h>
#define NULL 0
typedef struct CirList
{
int Element;
CirList *Next;
}*Cl;
Cl InitCirList()
{
Cl list;
list=(Cl)malloc(sizeof(struct CirList));
if(!list)
exit(-1);
list->Next=NULL;
return list;
}
void Insert(int x,int position,Cl list)
{
Cl c=list;
int i=0;
while(i<position)
{
c=c->Next;
i++;
}
Cl node;
node=(Cl)malloc(sizeof(struct CirList));
if(!node)
exit(-1);
node->Element=x;
node->Next=c->Next;
c->Next=node;
}
void print(Cl list)
{
Cl position;
position=list->Next;
while(position!=NULL)
{
printf("%d ",position->Element);
position=position->Next;
}
printf("\n");
}
void Reverse(Cl list)//对链表进行逆转的操作,此处最好画一个链表进行一步一步的分析
{
Cl p,pre,cur,head,r;
if(list==NULL||list->Next==NULL)
exit(0);
head=list;
cur=list->Next;
p=cur->Next;
cur->Next=NULL;
while(p)
{
r=p->Next;
p->Next=cur;
cur=p;
p=r;
}
head->Next=cur;
}
void main()
{
Cl list=InitCirList();
Insert(1,0,list);
Insert(2,0,list);
Insert(3,0,list);
Insert(1,1,list);
print(list);
Reverse(list);
print(list);
}
算法导论10.2-7答案
最新推荐文章于 2021-05-23 20:50:01 发布