线性表--算法设计题2.15

已知指针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;
    
}
posted @ 2011-04-27 23:37  iwuyudong  阅读(339)  评论(0编辑  收藏  举报