美文网首页
06数据结构之链表下

06数据结构之链表下

作者: ssas_ | 来源:发表于2019-10-21 01:11 被阅读0次

本文介绍几个写链表代码技巧

1. 理解指针或引用的含义

将某个变量(对象)赋值给指针(引用), 实际上就是将这个变量(对象)的地址赋值给指针(引用),也可以反过来说,指针(yiny)中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。比如:

  • p->next = q, 意思是p结点中的next指针存储了q结点的内存地址。
  • p->next = p->next->next表示p结点的next指针存储了p结点的下下一个结点的内存地址
2. 警惕指针丢失和内存泄漏

在写链表的时候,一定要

3.利用哨兵简化实现难度
  1. 什么是“哨兵”?
    链表中的“哨兵”结点是解决边界问题的,不参与业务逻辑,如果我们引用“哨兵”结点,则不管链表是否为空,head指针都是指向这个"哨兵"结点,我们把这种有“哨兵”结点的链表成为带头链表,相反,如果没有“哨兵”结点就称为不带头链表
    2.在链表中引入“哨兵”
    “哨兵”节点不存储数据,无论链表是否为空,head指针都会指向它,作为链表的头结点始终存在。这样,插入第一个节点和插入其他节点,删除最后一个节点和删除其他节点都可以统一为相同的代码实现逻辑了。
  2. 哨兵的应用
    暂时就自己知道的,貌似有的排序的算法也可以利用(后面去详细了解一下!)
4.重点留意边界条件处理

在完成链表代码后,可以用一下几个边界条件检查代码是否正确:

  • 如果链表为空时,代码是否能正常工作。
  • 如果链表只包含一个结点时,代码是否能正常工作。
  • 如果链表只包含两个结点时,代码是否能正常工作。
  • 代码逻辑在处理头结点和尾结点的时候,是否能正常工作。
    除此之外,针对不同的场景,可能还有特定的边界条件,这个需要自己去思考,实际上, 不光是写链表,写任何代码,一定要多想想,你的代码在运行的时候,可能会遇到哪些边界情况或者异常情况。遇到了应该如何应对,这个写出来的代码才够健壮。
5.举例画图,辅助思考
6.多写多练,没有捷径
  1. 5个常见的链表操作
    1. 单链表反转
    2. 链表中环的检测
    3. 两个有序链表的合并
    4. 删除链表倒数第n个结点
    5. 求链表的中间结点
      很多链表在逻辑上并没有什么复杂的,最重要的还是能够用代码bug free的实现出来,多写多练。

相关文章

  • iOS 数据结构之链表

    iOS 数据结构之链表 iOS 数据结构之链表

  • 06数据结构之链表下

    本文介绍几个写链表代码技巧 1. 理解指针或引用的含义 将某个变量(对象)赋值给指针(引用), 实际上就是将这个变...

  • 数据结构 | 其二 链表

    冰河winner - 数据结构之链表 2.1 单向链表 数据结构(一) 单链表的实现-JAVA 2.2 双端链表 ...

  • 链表(上):如何实现LRU缓存淘汰算法?

    06 | 链表(上):如何实现LRU缓存淘汰算法? 今天我们来聊聊“链表(Linkedlist)”这个数据结构。学...

  • 什么是链表?

    在了解完什么是数据结构之后,让我们一起来探索下数据结构中常见的一种—链表。 链表 链表是数据结构之一,其中的数据呈...

  • 算法与数据结构知识汇总(二、链表)

    1、概念 2、链表的数据结构 单向链表的数据结构如下图: 上图数据结构为单向链表,简称单链表,该数据结构由若干个节...

  • 数据结构和算法

    1.哈希表哈希算法详解(附带 iOS 开发中实际应用) 2.链表iOS 数据结构之链表

  • 单链表

    1.单链表## 对数据结构一直比较欠缺,所以准备i从头学习一下数据结构。从单链表开始,链表的介绍和定义就省略了,我...

  • Go语言数据结构和算法-LinkedList(链表)

    Go语言数据结构和算法-LinkedList(链表) 节点和链表数据结构 Prepend(item) 在链表头新增...

  • 常见链表面试题

    最近总结了一下数据结构和算法的题目,这是第二篇文章,关于链表的,废话少说,上链表的数据结构 1.翻转链表 2.判断...

网友评论

      本文标题:06数据结构之链表下

      本文链接:https://www.haomeiwen.com/subject/ewdzmctx.html