《数据结构与算法之美》读书笔记2

链表操作的技巧

1.理解指针

将摸个变量赋值给指针,实际上就是将这个变量的地址赋给指针,或者,指针中存储了这个变量的地址,指向了这个变量,所以可以通过指针找到这个变量。

2.内存泄漏或指针丢失

删除链表节点时,也要手动释放内存空间,否则会出现内存泄漏的问题。

在插入结点时,应该先将x结点的下一个指向p的下一个b结点,然后再将p的下一个结点赋为x结点

这样写会出现指针丢失:

a->next=x;

x->next=a->next;
这么写是对的:

x->next=a->next;

a->next=x;

在插入结点时,一定要注意操作的顺序。

利用哨兵简化实现难度

插入结点:

如果在结点p后面插入一个新的结点:

new_node->next=p->next;

p->next=new_node;
如果要想一个空链表中插入第一个节点,需要特殊处理,其中head表示链表的头结点:

if(head==null){

head=new_node;

}

删除结点:

单链表的删除:

p->next=p->next->next;
如果要删除链表中的最后一个结点,也是一种特殊情况:

if(p->next==null){

p=null;

}

我们可以看出,针对链表的插入、删除操作,需要对插入第一个结点和删除最后一个结点的情况进行特殊处理。这样代码实现起来就会很繁琐,不简洁,而且也容易因为考虑不全而出错。

相关推荐
charlie1145141914 小时前
从 0 开始:在 WSL + VSCode 上利用 Maven 构建 Java Spring Boot 工程
java·笔记·vscode·后端·学习·maven·springboot
e***74957 小时前
Spring Security 官网文档学习
java·学习·spring
山河亦问安11 小时前
Spring原理编码学习
java·学习·spring
思成不止于此11 小时前
【C++ 数据结构】二叉搜索树:原理、实现与核心操作全解析
开发语言·数据结构·c++·笔记·学习·搜索二叉树·c++40周年
钟屿12 小时前
Back to Basics: Let Denoising Generative Models Denoise 论文阅读学习
论文阅读·人工智能·笔记·学习·计算机视觉
d111111111d12 小时前
SPI通信协议--在STM32中介绍(学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习
断水客13 小时前
如何在手机上搭建Linux学习环境
linux·运维·学习
j***121514 小时前
网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
爬虫·学习·selenium
✎ ﹏梦醒͜ღ҉繁华落℘15 小时前
freeRTOS学习笔记(十四)--内存
笔记·学习
又是忙碌的一天15 小时前
mysql 学习第二天 SQL语句
sql·学习·mysql