链表的链接(2)

链表的链接和字符串的连接相似,将链表ptr1最后一个指针连接到链表ptr2开始的第一个结点上即可。

链表的链接
/*------------两个链表的链接-------------*/

#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);
}
原文地址:https://www.cnblogs.com/FCWORLD/p/1881464.html