《数据结构与算法之美》读书笔记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;

}

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

相关推荐
Gorgous—l3 分钟前
数据结构算法学习:LeetCode热题100-贪心算法篇(数组中的第K个最大元素、 前 K 个高频元素、数据流的中位数)
数据结构·学习·算法
哎呦 你干嘛~9 分钟前
tcpip通讯
学习
Dxy123931021617 分钟前
PyTorch训练的艺术:精通ReduceLROnPlateau学习率调度器
人工智能·pytorch·学习
炽烈小老头25 分钟前
【 每天学习一点算法 2026/03/11】从前序与中序遍历序列构造二叉树
学习·算法
敲代码的嘎仔31 分钟前
Java后端开发——基础面试题汇总
java·开发语言·笔记·后端·学习·spring·中间件
大卡拉米36 分钟前
ClaudeCode安装及使用
前端·学习
xhyyvr38 分钟前
VR应急救护学习机|沉浸式体验VR应急救护
学习·vr
mango_mangojuice1 小时前
C++学习笔记(list)3.6
c++·笔记·学习
星幻元宇VR1 小时前
VR生产安全学习机|开启智慧安全培训新时代
人工智能·科技·学习·安全·vr
deng-c-f1 小时前
Linux C/C++ 学习日记(80):Kafka(八):topic会自动创建吗?
linux·c++·学习·karfka