为什么LA链表插入LC,LB也插入LC链表中,最后输出LA链表值变了???
#include<stdio.h>#include<stdlib.h>
#define OK 1
#define ERROR 0
typedef struct node
{
int data;
struct node *next;
}Node,*LinkList;
Node *create()//单链表的创建
{
Node *head,*p,*q;
int a,n;
scanf("%d",&n);
q=head=(Node *)malloc(sizeof(Node));
printf("请输入链表中元素:");
while(n--)
{
scanf("%d",&a);
p=(Node *)malloc(sizeof(Node));
p->next=NULL;
p->data=a;
q->next=p;
q=q->next;
}
p->next=NULL;
return(head);
}
void print(LinkList head)
{
LinkList p=head;
if(p->next==NULL)
return;
p=p->next;
while(p)
{
printf("%d->",p->data);
p=p->next;
}
printf("\b\b \b\b\n");
}
void Sort(LinkList l)
{
int temp;
LinkList p=l->next,q;
while(p)
{
q=p->next;
while(q)
{
if(p->data>q->data)
{
temp=p->data;
p->data=q->data;
q->data=temp;
}
q=q->next;
}
p=p->next;
}
}
void MergeLinkList1(LinkList l)
{
Node *p,*q,*r;
p=l->next;
while(p)
{
q=p;
while(q->next)
{
if(q->next->data==p->data)
{
r=q->next;
q->next=r->next;
free(r);
}
else q=q->next;
}
p=p->next;
}
}
void InsList(LinkList L1, LinkList L2)
{
node *p=NULL;
for(p=L1;p->next!=NULL;p=p->next);
p->next=L2->next;
}
LinkList MergeLinkList2(LinkList LA,LinkList LB,LinkList LC)//合并单链表
{
Sort(LA);
Sort(LB);
Node *pa,*pb,*r;
pa=LA->next;
pb=LB->next;
LC=LA;
LC->next=NULL;
r=LC;
while(pa!=NULL&&pb!=NULL)
{
if(pa->data<=pb->data)
{
r->next=pa;
r=pa;
pa=pa->next;
}
else
{
r->next=pb;
r=pb;
pb=pb->next;
}
}
if(pa!=NULL)
r->next=pa;
else
r->next=pb;
free(LB);
return(LC);
}
/*void ClearList(LinkList L)
{
LinkList p,q;
p=L->next;
while(p)
{
p=q;
q=p->next;
free(p);
}
L->next=NULL;
}*/
int main()
{
printf("输入A链表的元素的个数:");
LinkList LA=create();
printf("输入B链表的元素的个数:");
LinkList LB=create();
Node LC;
LC.next=NULL;
InsList(&LC,LA);
InsList(&LC,LB);
//MergeLinkList1(&LC);
if (&LC)
print(&LC);
else
printf("合并失败");
/* LC.next=NULL;
LinkList c=MergeLinkList2(LA,LB,&LC);
if(c)
print(c);
else
printf("合并失败");*/
print(LA);
print(LB);
return 0;
}