void verge(seqlist *a)
将顺序表a就地转置,即借助于O(1)的辅助空间。
#include<stdio.h>
#include<malloc.h>
typedef struct Linknode Link;
struct Linknode
{
int date;
Link *next;
};
void *Add(Link *seqlist);
void Verge(Link *seqlist);
void Print(Link *seqlist);
int main()
{
Link *seqlist;
seqlist=(Link *)malloc(sizeof(Link));
seqlist->next=NULL;
Add(seqlist);
Print(seqlist);
Verge(seqlist);
Print(seqlist);
return 0;
}
//批量增加节点
void *Add(Link *seqlist)
{
int n, i;
Link *p, *q;
q=seqlist;
printf("需要加入的数据个数:");
scanf("%d", &n);
printf("输入%d个数据:\n", n);
for(i=0; i<n; i++)
{
p=(Link *)malloc(sizeof(Link));
scanf("%d", &(p->date));
p->next=NULL;
q->next=p;
q=p;
}
}
//转置链表
void Verge(Link *seqlist)
{
Link *temp, *p, *p1, *mark;
mark=(Link *)malloc(sizeof(Link));
mark->next=seqlist->next;
for(p=seqlist->next; p!=NULL; )
{
printf("%6d",p->date);
temp=(Link *)malloc(sizeof(Link));
temp=p;
p=p->next;
temp->next=seqlist->next;
seqlist->next=temp;
}
printf("测试1:\n");
printf("转置后的数据如下:\n");
Print(seqlist);
}
//打印链表数据
void Print(Link *seqlist)
{
Link *p;
printf("链表数据如下:\n");
for(p=seqlist->next; p!=NULL; p=p->next)
{
printf("%d\t", p->date);
}
printf("\n");
}