记忆口诀
先绑新节点,再改左节点,最后改目标节点
标准代码
// 1. 新节点 p 先对接 pk
p->next = pk;
// 2. 新节点 p 对接 pk 的原始前驱
p->prev = pk->prev;
// 3. 修改 pk 原来前驱节点的后继指针
pk->prev->next = p;
// 4. 最后修改 pk 自身前驱指针
pk->prev = p;
分步解析
1. 新节点 p 先对接 pk(p->next = pk)
2. 新节点 p 对接 pk 的原始前驱(p->prev = pk->prev)
- 前两步只读取原链表指针,不修改任何原有节点,不会丢失地址
3. 修改 pk 原来前驱节点的后继指针(pk->prev->next = p)
4. 最后修改 pk 自身前驱指针(pk->prev = p)
- 最后一步才覆盖 pk->prev,前面全程可用原始前驱地址
顺序出错隐患
如果提前执行第四步修改pk->prev,会直接覆盖丢失 pk 左侧节点地址,后续代码无法找到原前驱节点,出现链表断链、自环、空指针报错。
&spm=1001.2101.3001.5002&articleId=163705046&d=1&t=3&u=67d1c0e066604377a074f017c61e8d25)
952

被折叠的 条评论
为什么被折叠?



