怎么将两个链表合并,要求是放在一个新的链表中

来源:百度知道 编辑:UC知道 时间:2024/05/16 13:29:39
void unite(LinkList La,LinkList Lb,LinkList &Lc,int &a)
{
struct LNode *p,*q;
LinkList r;
a=1;
Lc=(LinkList)malloc(sizeof(LNode));
Lc->next=NULL;
p=La->next;
while(p){
q=Lb->next;
while(q){
if(p->data==q->data){
r=(LinkList)malloc(sizeof(LNode));
r->data=p->data;
r->next=Lc->next;
Lc->next=r;
a++;
break;
}
else
q=q->next;
}
p=p->next;
}
free(La);
free(Lb);
}
想了挺长时间,希望高手帮我看看。。。不能输出 啊
帮我指出即可,可定给分

错误的根源不在于这个函数,而是La、Lb的最后一个节点的next字段不赋值为NULL。测试代码:
#include <iostream.h>
#include <malloc.h>
#define NUM 5
struct LNode
{
int data;
struct LNode *next;
};

typedef struct LNode * LinkList;

void create(LinkList &list, int a[])
{
struct LNode *p;
int i;
list->next = NULL;

for (i = 0; i < NUM; ++i)
{
p = (LinkList)malloc(sizeof(LNode));
p->data = a[i];
p->next = list->next;
list->next = p;
}
}

void unite(LinkList La,LinkList Lb,LinkList &Lc,int &a)
{
struct LNode *p,*q;
LinkList r;
a=1;
Lc=(LinkList)malloc(sizeof(LNode));
Lc->next=NULL;
p=La->next;
while(p){
q=Lb->next;
while(q){
if(p->data==q->data){
r=(LinkList)malloc(sizeof(LNode));
r->data=p->data;
r->next=Lc->next;
Lc-