数据结构删除链表重复节点

#include"stdio.h"#include"conio.h"typedefstructnode{intdata;structnode*next;}LNode,*L... #include "stdio.h"
#include "conio.h"
typedef struct node
{
int data;
struct node *next;
}LNode,*Linklist;
Linklist Linklist_Create(Linklist L);

main()
{
Linklist L,P,Q,H;
L=(Linklist)malloc(sizeof(LNode));
H=Q=L->next;
Linklist_Create(L);
while(Q&&Q->next)
{
while(Q&&Q->next)
{
P=Q->next;
if(Q->data==Q->next->data)
{
Q->next=Q->next->next;
free(P);
}
else
Q->next=Q->next->next;
}
Q=Q->next;
}
while(L&&L->next)
{
printf("%d\t",L->next->data);
L=L->next;
}
getch();
}

Linklist Linklist_Create(Linklist L)
{
int num;
Linklist H,S;
S=L;
printf("input num:");
scanf("%d",&num);
while(num!=0)
{
H=(Linklist)malloc(sizeof(LNode));
L->next=H;
H->data=num;
L=H;
scanf("%d",&num);
}
H->next=NULL;
return S;
}
可以运行,结果没删掉重复的节点,谁能帮我分析一下原因
展开
 我来答
瘦成一导闪电呀
高粉答主

2015-10-19 · 每天分享健身知识,希望每位小仙女走路带风
瘦成一导闪电呀
采纳数:1266 获赞数:52259

向TA提问 私信TA
展开全部
步骤如下:
让x节点的前置节点的向后指针域指向x节点的向后指针域指向的节点;
让x节点的后续节点的向前指针域指向x节点的向前指针域指向的节点;
释放x节点;
p->llink->rlink= p->rlink;
p->rlink->llink= p->llink;
free(X);
当然,如果双向链表不是循环链表,带头指针这些,还需要考虑X节点作为第一个节点或者最后一个节点的特殊情况。
xiaohuoban160
2011-04-02 · TA获得超过169个赞
知道答主
回答量:73
采纳率:0%
帮助的人:98.7万
展开全部
你这只是检查了2个相邻的结点的值是否相等,没有一个一个地去比较,应该用类似冒泡排序的方法去一个一个比对。
应该先用函数先求出你后面创建的节点数n,再用2个for循环去逐个比对,如果你不会写我可以帮你。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jg1681988
2011-04-02
知道答主
回答量:24
采纳率:0%
帮助的人:24.8万
展开全部
你的程序比较乱,我帮你改了下,可以运行了,自己试试。
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#define NULL 0
typedef struct node
{
int data;
struct node *next;
}LNode,*Linklist;
Linklist Linklist_Create(Linklist L);

void main()
{
//Linklist L,P,Q,H;
Linklist L,P,Q;
L=(Linklist)malloc(sizeof(LNode));
Q=L->next;
L=Linklist_Create(L);
Q=L;//
//while(Q&&Q->next)
while(Q->next)
{
//while(Q&&Q->next)
{
P=Q->next;
if(Q->data==Q->next->data)
{
Q->next=Q->next->next;
free(P);
}
else
//Q->next=Q->next->next;
Q=Q->next;
}
//Q=Q->next;
}
//while(L&&L->next)
while(L->next)
{
printf("%d\t",L->next->data);
L=L->next;
}
//getch();
}

Linklist Linklist_Create(Linklist L)
{
int num;
Linklist H,S;
S=L;
printf("input num:\n");
scanf("%d",&num);
while(num!=0)
{
H=(Linklist)malloc(sizeof(LNode));
L->next=H;
H->data=num;
L=H;
scanf("%d",&num);
}
H->next=NULL;
return S;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式