C语言实现删除单向不循环链表重复节点

本文介绍了如何使用C语言实现单向不循环链表中删除重复节点的方法,包括仅保留第一个重复节点和完全删除所有重复节点的操作。
摘要由CSDN通过智能技术生成

预置条件

typedef struct link_list {
	int data;
	struct link_list* next;
}LINK_NODE; //定义一个链表节点,包含数据属性data,和指向该结构体的指针netx

1.删除重复节点(只保留第一个重复的节点)

LINK_NODE* del_repetition(LINK_NODE* phead)
{
	/*
	删除链表中的重复元素(重复元素中只保留第一个重复的元素)
	方法:双指针,a指针指向最前面的节点,b指针遍历链表,找出与a指针值相同的节点,删除节点。
	*/

	LINK_NODE* ptmp = phead;
	LINK_NODE* pstart = phead;
	LINK_NODE* pfun = phead;
	LINK_NODE* pre = NULL;
	
	if (NULL == phead) //如果链表为空,则返回空
	{
		printf("warning:链表为空\n");
		return phead;
	}
	
	while (phead != NULL)//外层循环使phead指针依次指向每一个节点
	{
		pfun = phead;
		while (pfun != NULL && pfun->next != NULL)//内层循环使pfun指针依次指向phead之后的每一个节点
		{										  //如果pfun节点的值等于phead的值,则删除该节点,										
			if (pfun->next->data == phead->data)  //并将该节点的上一个节点与该节点的下一个节点连接;
			{
				pre = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值