考研复试之数据结构——链表

链表应用

虽然考试中极少会考察链表的实际应用,一般都是直接考各种链表的各种操作,不过我觉得了解链表的实际应用场景有利于建立一种直觉,加深我们对链表数据结构本身的理解。由于我本身对链表应用也不甚了解,在查阅一定资料后,我认为有一句话能比较好的总结:

链表插入删除效率极高,达到O(1)。对于不需要搜索但变动频繁且无法预知数量上限的数据,比如内存池、操作系统的进程管理、网络通信协议栈的trunk管理等等等等,缺了它是绝对玩不转的。[1]——知乎用户invalid s

链表

这一小节主要讨论链表本身:单链表的抽象数据类型(ADT)、有哪些种类的链表、关于链表的常考题型有哪些

抽象数据类型

class MyLinkedList{
public:
    // 单链表结点
    struct ListNode{
        int val;
        struct ListNode* next;
    }

    // 构造函数
    MyLinkedList(){}

    // 获取第index位的元素
    int get(int index){}
    
    // 头插法插入元素
    void addAtHead(int val){}

    // 尾插法插入元素
    void addAtTail(int val){}

    // 在第index位插入元素
    void addAtIndex(int index, int val){}

    // 删除第index位的元素
    void deleteAtIndex(int index){}
}

各类链表

  1. 带头结点的(头指针的后继指向第一个元素)
  2. 不带头结点的(头指针指向第一个元素)
  3. 单链表(每个元素只需要维护一个指针)
  4. 双链表(每个元素需要维护两个指针,分别指向前驱和后继结点)
  5. 循环的(最末尾元素的后继为空)
  6. 不循环的(最末尾元素的后继为第一个元素或头结点)

常考题型

题目挑选范围参考Github仓库CyC2018/CS-Notes[2]

对两个链表进行一系列操作

主要考察增删改查操作

  1. 合并两个有序链表
  2. 两数相加 II

  3. 两数相加

对单链表内结点进行操作

也主要考察增删改查操作

  1. 两两交换链表中的节点

  2. 回文链表

  3. 分隔链表

  4. 反转链表

  5. 奇偶链表

  6. 删除链表的倒数第 N 个结点

  7. 删除排序链表中的重复元素

  8. 分隔链表

循环链表(双指针技巧)

双指针技巧不仅可以很有效地判断链表是否有环,在一些问题,如寻找链表中点、判断链表是否相交等问题也能起到奇效

  1. 相交链表

  2. 环形链表

 

参考资料

[1] 链表(linked list)这一数据结构具体有哪些实际应用? - invalid s的回答 - 知乎 https://www.zhihu.com/question/60724366/answer/179474654

[2] https://github.com/CyC2018/CS-Notes

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值