数据结构删除链表重复节点
#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;
}
可以运行,结果没删掉重复的节点,谁能帮我分析一下原因 展开
#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;
}
可以运行,结果没删掉重复的节点,谁能帮我分析一下原因 展开
3个回答
展开全部
你这只是检查了2个相邻的结点的值是否相等,没有一个一个地去比较,应该用类似冒泡排序的方法去一个一个比对。
应该先用函数先求出你后面创建的节点数n,再用2个for循环去逐个比对,如果你不会写我可以帮你。
应该先用函数先求出你后面创建的节点数n,再用2个for循环去逐个比对,如果你不会写我可以帮你。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的程序比较乱,我帮你改了下,可以运行了,自己试试。
#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;
}
#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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询