学习笔记-数据结构-线性表(2024-04-17)

设计一个算法实现在单链表中删除值相同的多余节点的算法。

设计思想 :双指针
变量说明
head - 参数变量,代表链表的头节点。在调用DelSameNum函数时,需要传递链表的头节点的地址给这个参数,从而允许函数对链表进行操作。
p - 指针变量,用于在链表中顺序遍历节点。在外层循环中,p从头节点开始,依次指向链表中的每一个节点,直到最后一个节点。
q - 指针变量,与p配合使用。在内层循环中,q从p所指向节点的下一个节点开始,遍历p之后的所有节点。它用于寻找和删除与p指向节点的data值相同的节点。
s - 指针变量,始终指向q节点的前一个节点。在删除q所指向的节点时,s的next将被更新为q->next,从而维持链表的连续性。s是在内层循环中声明并使用的。

c 复制代码
typedef struct node
{
	int data;
	struct node * next;
}LinkList;
void DelSameNum(LinkList * head)
{
	struct node *p;
	struct node *q;
	for(p=head;p->next!=NULL;p=p->next) // 遍历链表直到最后一个节点
	{
		s=p; // 设置s指向为p,因为删除操作将从p的下一个节点开始
		for(q=p->next;q!=NULL;)
		{
			if(q->data==p->data) // 如果找到值相同的节点
			{
				s->next=q->next; // s下一个所指向的节点直接跳到q的下一个
				free(q); // 释放被删除节点的内存
				q=s->next; // 更新q,继续检查下一个节点
			}
			else
			{
				s=q; // 如果节点值不同,更新s为当前的q
				q=q->next; // 移动到下一个节点
			}
		}
	}
}

动态大致图解如下:

相关推荐
微露清风2 小时前
系统性学习Linux-第二讲-基础开发工具
linux·运维·学习
不会代码的小猴3 小时前
Linux环境编程第六天笔记--system-V IPC
linux·笔记
阳光九叶草LXGZXJ3 小时前
达梦数据库-学习-48-DmDrs控制台命令(同步之Manager、CPT模块)
linux·运维·数据库·sql·学习
乌恩大侠3 小时前
【笔记】USRP 5G 和 6G 参考架构
笔记·5g
biuyyyxxx3 小时前
Python自动化办公学习笔记(一) 工具安装&教程
笔记·python·学习·自动化
舟舟亢亢4 小时前
Java集合笔记总结
java·笔记
L_09074 小时前
【C++】高阶数据结构 -- 红黑树
数据结构·c++
丝斯20115 小时前
AI学习笔记整理(66)——多模态大模型MOE-LLAVA
人工智能·笔记·学习
军军君016 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three
bylander6 小时前
【AI学习】TM Forum《Autonomous Networks Implementation Guide》快速理解
人工智能·学习·智能体·自动驾驶网络