永发信息网

数据结构问题 已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n.试

答案:1  悬赏:70  手机版
解决时间 2021-08-20 13:33
  • 提问者网友:缘字诀
  • 2021-08-19 14:50
数据结构问题 已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n.试
数据结构问题
已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n.试写一算法将这两个链表连接在一起,假设指针hc指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算.请分析你的算法的时间复杂度.
已有下图算法,求补写完整可执行代码(完整的能运行的程序)
最佳答案
  • 五星知识达人网友:三千妖杀
  • 2021-08-19 15:02

实现如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
\x09int data;
\x09Node *next;
} *LinkList;

void InitList(LinkList & l)//初始化链表
{
l = (Node*) malloc (sizeof(Node));
\x09l->next = NULL;
}

void AddList(LinkList & l,int x)//插入元素
{
LinkList pa = l;
while(pa->next)
{
\x09 pa = pa->next;
}

LinkList temp = (LinkList)malloc(sizeof(Node));
temp->data = x;
temp->next = NULL;

pa->next = temp;
}

void DelList(LinkList & l,int x)//删除链表元素
{
\x09LinkList pa = l;
\x09if(pa->next == NULL)
\x09\x09return;
\x09while(pa->next->next)
\x09{
\x09\x09pa = pa->next;
\x09}

\x09LinkList temp = pa->next;
\x09pa->next = NULL;
\x09free(temp);
}

void PrintList(LinkList &l)//打印链表元素
{
\x09LinkList pa = l->next;
\x09int count = 0;
\x09while(pa)
\x09{
\x09\x09printf("%d\t",pa->data);
\x09\x09count++;
\x09\x09if(count % 5 == 0)
\x09\x09\x09printf("\n");

\x09\x09pa=pa->next;

\x09}
\x09if(count % 5 != 0)
\x09\x09printf("\n");
}

void MergeList_L(LinkList &ha,LinkList &hb,LinkList &hc)//合并链表
{
\x09LinkList pa,pb;
\x09pa = ha;
\x09pb = hb;
\x09while(pa->next && pb->next)
\x09{
\x09\x09pa = pa->next;
\x09\x09pb = pb->next;
\x09}
\x09if(!pa->next)
\x09{
\x09\x09hc = hb;
\x09\x09while(pb->next) pb = pb->next;
\x09\x09pb->next = ha->next;
\x09}
\x09else
\x09{
\x09\x09hc = ha;
\x09\x09while(pa->next) pa = pa->next;
\x09\x09pa->next = hb->next;
\x09}
}
int main()
{
\x09LinkList ha,hb,hc;
\x09InitList(ha);
\x09InitList(hb);
\x09InitList(hc);
\x09for(int i = 0; i < 10; i++)
\x09\x09AddList(ha,i);
\x09printf("链表ha的元素有:\n");
\x09PrintList(ha);

\x09for(int i = 30; i < 35;i++)
\x09\x09AddList(hb,i);
\x09printf("链表hb的元素有:\n");
PrintList(hb);

\x09//连接操作
\x09MergeList_L(ha,hb,hc);
\x09printf("合并后链表hc的元素有:\n");
\x09PrintList(hc);

}
测试如下:

再问: MergeList函数能解释下吗
再问: while循环和if的句子
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯