已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n。试写一算法将这两个链表连接在一起,假设指针hc指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算。
C code:
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 10
#define LIST_INCREMENT 2
#define ERROR 0
#define OK 1
#define OVERFLOW -1
#define TRUE 1
typedef int Status;
struct LNode
{
int data;
LNode *next;
};
typedef LNode *LinkList;
void InitList(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode));
if(!L)
exit(OVERFLOW);
L->next=NULL;
}
void CreateList(LinkList &L,int n)
{
int i;
LinkList p,q;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=L;
printf("Please input %d numbers:\n",n);
for(i=1; i<=n; i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
q=q->next;
}
p->next=NULL;
}
void PrintList(LinkList L)
{
LinkList p;
p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
LinkList connect(LinkList La,LinkList Lb)
{
LinkList Lc,p,q;
Lc=(LinkList)malloc(sizeof(LNode));
p=La->next;
Lc->next=p;
q=Lb->next;
while(p->next)
{
p=p->next;
}
p->next=q;
free(La);
free(Lb);
return Lc;
}
int main()
{
LinkList La,Lb,Lc;
CreateList(La,8);
CreateList(Lb,4);
printf("LinkList La: ");
PrintList(La);
printf("\n");
printf("LinkList Lb: ");
PrintList(Lb);
printf("\n");
Lc=connect(La,Lb);
printf("LinkList Lc: ");
PrintList(Lc);
return 0;
}
#define LIST_INIT_SIZE 10
#define LIST_INCREMENT 2
#define ERROR 0
#define OK 1
#define OVERFLOW -1
#define TRUE 1
typedef int Status;
struct LNode
{
int data;
LNode *next;
};
typedef LNode *LinkList;
void InitList(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode));
if(!L)
exit(OVERFLOW);
L->next=NULL;
}
void CreateList(LinkList &L,int n)
{
int i;
LinkList p,q;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=L;
printf("Please input %d numbers:\n",n);
for(i=1; i<=n; i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
q=q->next;
}
p->next=NULL;
}
void PrintList(LinkList L)
{
LinkList p;
p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
LinkList connect(LinkList La,LinkList Lb)
{
LinkList Lc,p,q;
Lc=(LinkList)malloc(sizeof(LNode));
p=La->next;
Lc->next=p;
q=Lb->next;
while(p->next)
{
p=p->next;
}
p->next=q;
free(La);
free(Lb);
return Lc;
}
int main()
{
LinkList La,Lb,Lc;
CreateList(La,8);
CreateList(Lb,4);
printf("LinkList La: ");
PrintList(La);
printf("\n");
printf("LinkList Lb: ");
PrintList(Lb);
printf("\n");
Lc=connect(La,Lb);
printf("LinkList Lc: ");
PrintList(Lc);
return 0;
}