这几天做链表简单题巩固链表知识。
基本概念
像是反转链表、移除链表元素、合并有序链表都是对于链表最最基本的操作,不需要有什么深奥的思考过程,主要要关注的只是链表基本功能的实现,注意好整个过程的实现细节,这些都不难。
双指针的使用
在链表简单题中比较有难度的里面双指针常常会用到,因为链表无法直接获得其长度,所以常常用双指针来获得其位置、长度。
在移除重复节点中如果不使用缓冲区,便是使用双指针,一个指针读取当下节点值,另一个指针遍历链表去除重复节点;在获得链表倒数第k个节点时,一个指针先读取k次,然后两个指针保持k的距离一起遍历,直到第一个指针读到链表结束。
利用双指针比较复杂一点有对于环形链表的判断,设置快慢指针,在环形链表中运行类似于跑圈一样,快的一定可以追上慢的。当然这道题像我利用set()将节点next()指针添加到集合然后判断是否重合也不是不行。
除此之外,对于链表相交的判断利用双指针也是十分的巧妙,这道题真的告诉我要用双指针我可能也没有思路……
随笔
其实感觉链表相关的题目难度已经上来的,本身是应该抓紧刷题、总结的,但是鉴于现在的目的还是辅助算法、数据结构学习,就不过多做题了。