两个链表的交叉合并,最简单的,求C++代码。
展开全部
在此我只给出两个链表交叉合并的函数代码,而且是基于下面前提的:
链表chain1,链表长度为a,链表chain2,链表长度为b;
当a>=b时,chain1的结构依次排在chain2中相应的结构之前,且chain1中多出来的元素跟在chain2的结尾,例如:
chain1长为5,元素分别: 1、3、5、7、9
chain2长为3,元素分别: 2、4、6
则排列后新的链表为:1、2、3、4、5、6、7、9(注意7和9)
当b>a时则反之。
测试的方法:
把原main中的hebing(p1,p2,a); 这 一句改为:
p1 = inter_link(p1,a,p2,b);
即可
下面为代码:
struct student* inter_link(struct student* chain1, int a, struct student* chain2, int b)
{
int temp;
struct student *head, *p1, *p2, *pos;
/*调整相应数据*/
if(a>=b)
{
head = p1 = chain1;
p2 = chain2;
}
else/*b>a*/
{
head = p1 = chain2;
p2 = chain1;
temp = a, a = b, b = temp;/*交换a和*/
}
/*下面把p1的每个元素插在p2相应元素之前,p1长a,p2长b*/
pos = head;/*此时pos指向p1中的第一个元素*/
while(p2 != NULL)
{
p1 = p1->next;
pos->next = p2;
pos = p2;
p2 = p2->next;
pos->next = p1;
pos = p1;
}
return head;
}
链表chain1,链表长度为a,链表chain2,链表长度为b;
当a>=b时,chain1的结构依次排在chain2中相应的结构之前,且chain1中多出来的元素跟在chain2的结尾,例如:
chain1长为5,元素分别: 1、3、5、7、9
chain2长为3,元素分别: 2、4、6
则排列后新的链表为:1、2、3、4、5、6、7、9(注意7和9)
当b>a时则反之。
测试的方法:
把原main中的hebing(p1,p2,a); 这 一句改为:
p1 = inter_link(p1,a,p2,b);
即可
下面为代码:
struct student* inter_link(struct student* chain1, int a, struct student* chain2, int b)
{
int temp;
struct student *head, *p1, *p2, *pos;
/*调整相应数据*/
if(a>=b)
{
head = p1 = chain1;
p2 = chain2;
}
else/*b>a*/
{
head = p1 = chain2;
p2 = chain1;
temp = a, a = b, b = temp;/*交换a和*/
}
/*下面把p1的每个元素插在p2相应元素之前,p1长a,p2长b*/
pos = head;/*此时pos指向p1中的第一个元素*/
while(p2 != NULL)
{
p1 = p1->next;
pos->next = p2;
pos = p2;
p2 = p2->next;
pos->next = p1;
pos = p1;
}
return head;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询