此代码可以正常运行
分析:从第一个结点开始进行比较,当两个链表La和Lb均为到达表尾结点时,如果La表中的元素小于Lb表中的元素,pre置为La表的工作指针pa删除Lb表中的元素;如果其中一个表中的元素较小时,删除此表中较小的元素,此表的工作指针后移。当链表La和Lb有一个为空时,依次删除另一个非空表中的所有元素。
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode, *LinkList;
// 尾插法建立链表
void CreateList(LinkList &L, int n)
{
L = new LNode;
L->next = NULL;
LNode *r;
r = L;
for (int i = 0; i < n; i++)
{
printf("请输入链表第%d个元素的值:", i + 1);
LNode *s;
s = new LNode;
scanf("%d", &s->data);
s->next = NULL;
r->next = s;
r = s;
}
}
void Diff(LinkList &La,LinkList &Lb)
{
LNode *p1,*p2,*p3,*q;
p1=La->next;
p2=Lb->next;
p3=La;
La->data=0;
while(p1&&p2)
{
if(p1->data < p2->data)
{
p3->next=p1;
p3=p1;
p1=p1->next;
La->data++;
}
else if(p2->data < p1->data)
{
q=p2;
p2=p2->next;
free(q);
}
else
{
q=p1;
p1=p1->next;
free(q);
q=p2;
p2=p2->next;
free(q);
}
}
while(p1)
{
p3->next=p1;
p3=p1;
p1=p1->next;
La->data++;
}
p3->next=NULL;
while(p2)
{
q=p2;
p2=p2->next;
free(q);
}
free(Lb);
}
void TraveList(LinkList L)
{
LNode *p;
p = L->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
int n,m;
LinkList La,Lb;
LNode *p;
printf("输入La,Lb长度\n");
scanf("%d %d",&n,&m);
if(n==0 && m==0)
printf("创建失败\n");
CreateList(La,n);
CreateList(Lb,m);
Diff(La,Lb);
printf("此时的La为\n");
TraveList(La);
printf("此时La长度:%d\n",La->data);
return 0;
}
版权声明:本文为September_C原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。