链表的链接(2)
链表的链接和字符串的连接相似,将链表ptr1最后一个指针连接到链表ptr2开始的第一个结点上即可。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/*------------两个链表的链接-------------*/
#include"stdio.h"
#include"stdlib.h"
struct llist //链表的结构声明
{
int num; //邮寄编号
struct llist *next; //指向下一标签
};
typedef struct llist node; //定义新类型
typedef node *llink; //定义新类型指针
/*------------链表的输出----------*/
void printfllist( llink ptr)
{
while (ptr!=NULL) //链表遍历循环
{
printf("[%d]",ptr->num); //输出结点数据
ptr=ptr->next; //指向下一结点
}
printf("\n");
}
/*--------链表的创建--------*/
llink createllist(int *array ,int len)
{
llink head; //链表的头指针
llink ptr,ptr1;
int i;
/*----创建第一个结点---*/
head=( llink ) malloc(sizeof(node));
if(!head)
return NULL;
head->num=array[0]; //创建结点内容
head->next=NULL; //设置指针初值
ptr=head; //将ptr指向链表开始
for(i=1;i<len;i++) //创建其他结点循环
{
ptr1=( llink ) malloc(sizeof(node));
if(!ptr1)
return NULL;
ptr1->num=array[i];
ptr1->next=NULL;
ptr->next=ptr1; //连接结点
ptr=ptr->next; //指向下一结点
}
return head;
}
/*--------链表的连接---------*/
llink concatllist(llink ptr1,llink ptr2)
{
llink ptr;
ptr=ptr1; //指向链表1的开始
while(ptr->next!=NULL) //寻找链表1的结束
ptr=ptr->next; //指向下一结点
ptr->next=ptr2; //链接链表2
return ptr1;
}
/*-----连接两个由数组内容所创建的链表-----*/
int main()
{
int llist1[6]={1,2,3,4,5,6};
int llist2[5]={8,19,13,24,35};
llink ptr,ptr1,ptr2;
ptr1=createllist(llist1,6); //创建链表1
if(ptr1==NULL)
{
printf("内存分配失败!\n");
exit(1);
}
ptr2=createllist(llist2,5); //创建链表2
if(ptr2==NULL)
{
printf("内存分配失败!\n");
exit(1);
}
ptr=concatllist(ptr1,ptr2); //链接两链表
printfllist(ptr);
}