两个单链表,删除数据相同的元素,使得两个单链表每个元素都不相同(C语言版)

typedefstructLNode{intdata;structLNode*next;}LNode,*LinkList;voiddel_same(LinkList*L,... typedef struct LNode{
int data;
struct LNode* next;
}LNode,*LinkList;

void del_same(LinkList *L,LinkList *La)
{
LNode *p,*q,*pa,*qa;
p=*L;q=(*L)->next;
while(q)
{
pa=*La;qa=(*L)->next;
while(qa)
{
if(q->data==qa->data)
{
pa->next=qa->next;
free(qa);
qa=pa->next;
p->next=q->next;
free(q);
q=p;
}else{
pa=pa->next;
qa=qa->next;
}
}
if(p==q){
q=p->next;
}else{
q=q->next;
p=p->next;
}
}
}
这个函数在运行时老是出错,编译,链接时没有错误
展开
 我来答
爱笑的笔迹
2015-08-20 · TA获得超过639个赞
知道小有建树答主
回答量:161
采纳率:66%
帮助的人:88.5万
展开全部
我目测你的想法是这样:
我写的是伪代码!
首先遍历链表每一个元素
然后遍历链表这个元素后面的元素看是否有相同的
有相同的就用p->next=q->next....删除之..
可是你想过没有破坏性太大了...你到底删除了多少元素啊!.....
举个例子 假如 1 2 3 4 1 5 你这样删除就是将2 3 4全干掉了...链表挂了.
更多追问追答
追问
不是伪代码,是C语言,1234   15这个例子中,我的只是删除了1这个数字而已啊
追答
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node*next;
}NODE,*LinkList;
LinkList Create()
{
LinkList head ,p,temp;
int num=0;
head=(LinkList)malloc(sizeof(NODE));
head->next=NULL;
temp=head;
scanf("%d",&num);
while(num!=-1)
{
p=(LinkList)malloc(sizeof(NODE));
temp->next=p;
p->data=num;
temp=p;
scanf("%d",&num);
}
p->next=NULL;
return head;
}
void ShowList(LinkList head)
{
LinkList p=head->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void DelSame(LinkList head)
{
LinkList p=head->next;
LinkList q,q_prenode;
while(p)
{
q_prenode=p;
q=p->next;
while(q!=NULL)
{
if(p->data==q->data)
{
q_prenode->next=q->next;
 free(q);
}
else
{
q_prenode=q;
}
q=q_prenode->next;
}
p=p->next;

}

}
void DestroyList(LinkList head)
{
LinkList p=head->next,q;
while(p!=NULL)
{
q=p->next;
free(p);
p=q;
}
}
int main()
{
LinkList p;
p=Create();
if(p)
ShowList(p);
DelSame(p);
ShowList(p);
DestroyList(p);
return 0;

}

 刚刚自己手写了一份..我刚刚说你写的代码是有逻辑漏洞的...你只删除了元素却没有想到这样删除会破坏链表的整个结构。。所以你的代码逻辑错误了

wenqing8585
2017-10-01 · TA获得超过8252个赞
知道大有可为答主
回答量:8078
采纳率:70%
帮助的人:3880万
展开全部
pa=*La;qa=(*L)->next; 这句要改成 pa=*La;qa=(*La)->next;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-08-20
展开全部
函数的参数分别代表什么意思?
追问
代表两个单链表L,La
追答
if(q->data==qa->data) 指向的都是一个位置嘛。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式