已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n。
答案:2 悬赏:0
解决时间 2021-12-31 17:04
- 提问者网友:趣果有间
- 2021-12-31 06:53
已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n。
最佳答案
- 二级知识专家网友:往事埋风中
- 2021-12-31 08:31
#include
#include
typedef struct Node
{
int data;
Node *next;
} *LinkList;
void InitList(LinkList & l)//初始化链表
{
l = (Node*) malloc (sizeof(Node));
l->next = NULL;
}
void AddList(LinkList & l, int x)//插入元素
{
LinkList pa = l;
while(pa->next)
{
pa = pa->next;
}
LinkList temp = (LinkList)malloc(sizeof(Node));
temp->data = x;
temp->next = NULL;
pa->next = temp;
}
void DelList(LinkList & l, int x)//删除链表元素
{
LinkList pa = l;
if(pa->next == NULL)
return;
while(pa->next->next)
{
pa = pa->next;
}
LinkList temp = pa->next;
pa->next = NULL;
free(temp);
}
void PrintList(LinkList &l)//打印链表元素
{
LinkList pa = l->next;
int count = 0;
while(pa)
{
printf("%d\t", pa->data);
count++;
if(count % 5 == 0)
printf("\n");
pa=pa->next;
}
if(count % 5 != 0)
printf("\n");
}
void MergeList_L(LinkList &ha, LinkList &hb, LinkList &hc)//合并链表
{
LinkList pa, pb;
pa = ha;
pb = hb;
while(pa->next && pb->next)
{
pa = pa->next;
pb = pb->next;
}
if(!pa->next)
{
hc = hb;
while(pb->next) pb = pb->next;
pb->next = ha->next;
}
else
{
hc = ha;
while(pa->next) pa = pa->next;
pa->next = hb->next;
}
}
int main()
{
LinkList ha, hb, hc;
InitList(ha);
InitList(hb);
InitList(hc);
for(int i = 0; i < 10; i++)
AddList(ha,i);
printf("链表ha的元素有:\n");
PrintList(ha);
for(int i = 30; i < 35;i++)
AddList(hb,i);
printf("链表hb的元素有:\n");
PrintList(hb);
//连接操作
MergeList_L(ha, hb, hc);
printf("合并后链表hc的元素有:\n");
PrintList(hc);
}
#include
typedef struct Node
{
int data;
Node *next;
} *LinkList;
void InitList(LinkList & l)//初始化链表
{
l = (Node*) malloc (sizeof(Node));
l->next = NULL;
}
void AddList(LinkList & l, int x)//插入元素
{
LinkList pa = l;
while(pa->next)
{
pa = pa->next;
}
LinkList temp = (LinkList)malloc(sizeof(Node));
temp->data = x;
temp->next = NULL;
pa->next = temp;
}
void DelList(LinkList & l, int x)//删除链表元素
{
LinkList pa = l;
if(pa->next == NULL)
return;
while(pa->next->next)
{
pa = pa->next;
}
LinkList temp = pa->next;
pa->next = NULL;
free(temp);
}
void PrintList(LinkList &l)//打印链表元素
{
LinkList pa = l->next;
int count = 0;
while(pa)
{
printf("%d\t", pa->data);
count++;
if(count % 5 == 0)
printf("\n");
pa=pa->next;
}
if(count % 5 != 0)
printf("\n");
}
void MergeList_L(LinkList &ha, LinkList &hb, LinkList &hc)//合并链表
{
LinkList pa, pb;
pa = ha;
pb = hb;
while(pa->next && pb->next)
{
pa = pa->next;
pb = pb->next;
}
if(!pa->next)
{
hc = hb;
while(pb->next) pb = pb->next;
pb->next = ha->next;
}
else
{
hc = ha;
while(pa->next) pa = pa->next;
pa->next = hb->next;
}
}
int main()
{
LinkList ha, hb, hc;
InitList(ha);
InitList(hb);
InitList(hc);
for(int i = 0; i < 10; i++)
AddList(ha,i);
printf("链表ha的元素有:\n");
PrintList(ha);
for(int i = 30; i < 35;i++)
AddList(hb,i);
printf("链表hb的元素有:\n");
PrintList(hb);
//连接操作
MergeList_L(ha, hb, hc);
printf("合并后链表hc的元素有:\n");
PrintList(hc);
}
全部回答
- 1楼网友:duile
- 2021-12-31 08:43
我觉得pa->next = hb; hc = ha;快很多
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯