数据结构问题 已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n.试数据结构问题已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/23 04:01:14
数据结构问题 已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n.试数据结构问题已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m
数据结构问题 已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n.试
数据结构问题
已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n.试写一算法将这两个链表连接在一起,假设指针hc指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算.请分析你的算法的时间复杂度.
已有下图算法,求补写完整可执行代码(完整的能运行的程序)
数据结构问题 已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n.试数据结构问题已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m
实现如下:
#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);
}
测试如下: