数据结构和算法-线性表14
#include <stdio.h>#include <stdlib.h>
typedef struct Linklist
{
int num;
struct Linklist *next;
}Linklist;
Linklist *connect(Linklist *A,Linklist *B)//A、B为非空循环链表的尾指针
{
Linklist *p;
p=A->next;//保存A表的头结点位置
A->next=B->next->next;//B表的开始结点链接到A表尾
free(B->next);//释放B表的头结点
B->next=p;
return B->next;//返回新循环链表的尾指针
}
Linklist *create(int n)//创建n个数据结构
{
Linklist *p=NULL,*head,*temp;//
int i=1;
head=(Linklist *)malloc(sizeof(Linklist));//申请内存
p=head;
if(0!=n)
{
while(i<=n)
{
temp=(Linklist *)malloc(sizeof(Linklist));
temp->num=rand()%50;
p->next=temp;
p=temp;
i=i+1;
}
temp->next=head->next;//最后一个指向第一个结点,最开始的舍去
}
free(head);
// return temp->next;//返回第一个结点指针
return temp;//返回尾结点指针
}
void main()
{
int i,n1=10,n2=20;
Linklist *p1=create(n1),*p;
Linklist *p2=create(n2);
for(i=0;i<n1;i++)
{
printf("%d->",p1->next->num);//p1->next->num从第一个结点开始打印
p1=p1->next;
}
printf("\n\n");
for(i=0;i<n2;i++)
{
printf("%d->",p2->next->num);//p2->next->num从第一个结点开始打印
p2=p2->next;
}
printf("\n\n");
p=connect(p1,p2);
for(i=0;i<(n1+n2);i++)
{
printf("%d->",p->num);
p=p->next;
}
printf("\n\n");
return 0;
} Linklist *connect(Linklist *A,Linklist *B)//A、B为非空循环链表的尾指针
{
Linklist *p;
p=A->next;//保存A表的头结点位置
A->next=B->next->next;//B表的开始结点链接到A表尾
free(B->next);//释放B表的头结点
B->next=p;
return B->next;//返回新循环链表的尾指针
}
把 A->next=B->next->next 改为 A->next=B->next,不然会丢失B的第一个结点
页:
[1]