数据结构与算法学习笔记二--链表

本文介绍了链表的基础概念,包括单向链表的创建、遍历、添加、删除节点的实现思路。接着讨论了单向链表的局限性,引出了双向链表,阐述了其优势以及遍历、添加、修改和删除的操作。此外,还探讨了单向环形链表的应用,如约瑟夫问题,并提供了构建和遍历环形链表的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表

  1. 链表是以节点的方式来存储
  2. 每个节点包含 data 域,next 域:指向下一个节点
  3. 链表的各个节点不一定是连续存储
  4. 链表分带头节点的链表 和没有头节点的链表,根据实际的需求来确定。
    在这里插入图片描述

[实践:实现单向链表的增删改查]

在这里插入图片描述

添加(创建)链表思路

  1. 先创建应该 head 头节点,作用就是表示单链表的头
  2. 后面我们每添加一个节点,就直接加入到链表的最后
  3. 遍历:1.通过一个辅助变量,帮助遍历整个链表
    在这里插入图片描述

第二种方式:需要按照编号的顺序添加:

  1. 首先找到新添加的节点的位置,是通过辅助变量(指针),通过遍历来搞定。
  2. 新的节点.next = temp.next
  3. 将 temp.next = 新的节点
从单链表中删除一个节点的思路
  1. 我们先找到 需要删除的这个节点的前一个节点 temp
  2. temp.next = temp.next.next
  3. 被删除的节点,将不会有其他引用指向,会被垃圾回收机制回收

双向链表

单向链表的缺点分析:

  1. 单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。
  2. 单向链表不能自我删除,需要靠辅助节点,而双向链表可以自我删除,所以我们前面用单链表删除节点时,总是找到temp的下一个节点来删除的。

双向链表

在这里插入图片描述

分析双向链表的遍历、添加、修改、删除的操作思路 ==》 代码实现
  1. 遍历: 方法与单链表一样,只是可以向前,也可以向后查找
  2. 添加(默认添加到双向链表的最后)
    (1) 先找到双向链表的最后这个节点
    (2) temp.next = newHeroNode;
    (3) newHeroNode.pre = temp;
  3. 修改思路和原来的单向链表一样
  4. 删除
    (1) 因为是双向链表,因此,我们可以实现自我删除某个节点
    (2) 直接找到要删除的这个节点,比如temp
    (3)temp.pre.next = temp.next;
    (4) temp.next.pre = temp.pre;

单向环形链表应用场景(著名的约瑟夫问题)

在这里插入图片描述

在这里插入图片描述

构建一个单向的环形链表的思路:

  1. 先创建第一个节点,让 first 指向该节点,并形成环形
  2. 后面当我们每创建一个新的节点,就把该节点,加入到已有的环形链表中即可。

遍历环形链表:

  1. 先让一个辅助指针(变量)curBoy,指向first节点。
  2. 然后通过一个while循环遍历该环形链表即可 curBoy.next == first 结束。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值