请教莱鸟我近一个星期也不能解决的程序~~~~
原程序如下:/**************a,b,c为三个递增有序的线性表,现对a操作:要求删除既在b出现又在c出现的元素************/
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define NULL 0
typedef struct LNode {
int data;
struct LNode *next;
}LNode, *LinkList;
LinkList creat(LinkList head)
{
LinkList l, q, p;//用指针类型定义三个节点类型的指针
int ch;
l = (LinkList)malloc(sizeof(LNode));//分配内存空间
l->data = 0; //为头结点的数据域赋值,值为0
l->next = NULL; //指明下一个结点目前不存在
q = l; //q为游动指针,链表结点的连结要用
printf("Input the Incremental s:\n");
scanf("%d",&ch);
while (ch != 0) //输入0,表示输入结束
{
p = (LinkList)malloc(sizeof(LNode)); //为新输入的数据分配内存空间
p->data = ch;
p->next = NULL; //新输入的节点在链表的最后,即它的后面没有其他元素
q->next = p; //q用于将上一个元素链接至当前新元素
q = p; //q自己移到当前最后一个元素,以备继续链接所用
scanf("%d",&ch);
}
q = l;//输入整个链表前,先将q移到链表头,l一般不动
return q;
}
void LinkList_Intersect_Delete(LinkList a,LinkList b,LinkList c)
{
LinkList p, q, r;
LinkList s, t;
int u;
r = a->next;
p = b->next;
q = c->next;
while ( p && q && r )
{
if (p->data < q->data)
p = p->next;
else if (p->data > q->data)
q = q->next;
else if (p->data == q->data)
{
u = p->data; //确定待删除元素u
while (r->next->data < u)
r = r->next; //确定最后一个小于u的元素指针r
if (r->next->data == u)
{
s = r->next;
if (s->data == u)
{
t = (LinkList)malloc(sizeof(LinkList));
t = s;
t->next = NULL;
s = s->next;
// r->next = s->next;
free(t); //确定第一个大于u的元素指针s
}
r->next = s;//删除r和s之间的元素
}
while (p->data == u)
p = p->next;
while (q->data == u)
q = q->next;
}
}
r = a->next;//输入整个链表钱,先将r移到链表头,a一般不动
/*打印结果*/
while (r->next != NULL)
{
printf(" %d",r->next->data);
r = r->next;
}
}
void main()
{
LinkList a = NULL, b = NULL, c = NULL;
a = creat(a);
b = creat(b);
c = creat(c);
LinkList_Intersect_Delete(a, b, c);
}
程序总是在LinkList_Intersect_Delete中中断,不能如期打印出结果!!~~
现向各位请教,程序如何调试才能如期打印结果~~~~谢咯~