用链表实现的c语言程序,用链表实现的一个小程序(C语言)

这个程序是实现这样一个功能:输入一列整数,输出是把这列数重复出现的数字过滤掉。

例如:输入12 13 12 14 13,输出:12 13 14,用链表实现。

//liushuaikobe1993@163.com

#include

#include

typedef struct NODE //节点的结构体类型

{

int e;

struct NODE *next;

}node,*linklist;

int get_element() //获取节点的数据段数据

{

int i;

scanf("%d",&i);

return i;

}

linklist build_list(int n)//链表的建立,其中n是链表的长度

{

linklist p,r,head=NULL;

int i;

printf("请一次性输入数字:");

for (i=0;i

{

p=(linklist)malloc(sizeof(node));

p->e=get_element();

p->next=NULL;

if (!head)//head为空,本次建立的是第一个节点,将它赋给head

head=p;

else//head不为空,本次建立的不是第一个节点,将它接在链表的尾部

r->next=p;

r=p;//r永远指向链表最后一个节点

}

return head;

}

void del_same_element(linklist head)

{

linklist r,p,t;

for (r=head;r!=NULL;r=r->next)

for (p=r->next;p!=NULL;p=p->next)

if (r->e==p->e)

{

for (t=head;t->next!=NULL;t=t->next)

if (t->next==p)

{

t->next=p->next;

break;

}

}

}

void display_list(linklist head)

{

linklist r;

for (r=head;r/*->next*/!=NULL;r=r->next)//如果"->next"不被注释掉,那么这也是错误的,链表的最后一个元素无法被遍历

printf("%d ",r->e);

/*linklist r=head; //这段代码是错误的,这样遍历链表会导致链表最后一个节点无法遍历的到,请读者自己分析

while(r!=NULL)

{

printf("%d ",r->e);

r=r->next;

}*/

}

int main()

{

int num;

while(1)

{

printf("输入元素个数(至少两个):");

scanf("%d",&num);

if (num>=2)

break;

}

linklist head=build_list(num);

del_same_element(head);

display_list(head);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值