学习笔记-数据结构-线性表(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; // 移动到下一个节点
			}
		}
	}
}

动态大致图解如下:

相关推荐
yi0118 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
志尊宝9 小时前
Vue3 零基础每日笔记(073):keep-alive 页面缓存实战——列表页返回不丢状态
vue.js·笔记·缓存·#vue #前端 #前端开发·#javascript·#vue.js
李日华大战鸡红11 小时前
FOC状态空间方程模型推导(学习记录)
python·学习·线性代数
禾小西11 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
weixin_4481199411 小时前
Datawhale Easy Data × AI:笔记1 已重做,看新的笔记
笔记
H.莓飛12 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
要开心吖ZSH12 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
好想像大佬一样能够ak所有12 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
kkkkkkkkkk_Z12 小时前
新手自学嵌入式 | 学习日记:异常与中断基础、i.MX6ULL裸机开发环境搭建、GPIO模块与点灯原理
学习
咖啡忍者13 小时前
【SAP】程制造生产计划PP-PI(Production Planning for Process Industries)
笔记