• 单链表 题型


    概要

    简述

    • 如果遇到多个单链表,那么大概率是需要使用双指针,要么就是优先级队列
    • 链表遍历框架,兼具线性和非线性遍历结构
      • 可以用循环遍历,也可以递归遍历
      • 所以可以思考一下,除了遍历还能用递归解题

    题型总结

    • 反转链表题型
    • 判断是否回文链表
    • 合并两个有序链表
    • 合并k个有序链表
    • 寻找单链表的倒数第k个节点
    • 寻找单链表的中点
    • 判断单链表是否包含环并找出环起点
    • 判断两个单链表是否相交并找出交点

    反转链表

    反转一个单链表

    • 反转链表过程中需要存储变量,代表两个链表,一个是已经反转的链表,一个待翻转的链表
    • 记得对于开始时,已经反转的链表是null,还有一个带翻转的链表

    对一个单链表位置m到位置n进行反转

    • 保存m之前的节点
    • 翻转m到n的链表
    • 拼接起来

    分组翻转

    • 因为要求如果不满足分组个数,则不进行翻转,所以就必须先分组再翻转
    • 递归和循环都能做

    判断是否回文链表

    回文链表特性

    • 回文串/回文链表,就是正者念反着念一模一样
      • 利用这个特性,可以反转回文串/回文链表,然后进行同时对两个串/链表遍历,逐一比对
    • 具备对称的属性
      • 利用这个特性,可以从中间向两边进行逐一比对
      • 对于单向链表,因为无法逆向遍历,那么可以把其中一半翻转完再进行对比

    做法

    • 如果基于正反念一样的特性,那么可以使用递归然后对链表进行逐一比对
    • 如果基于对称的特性,那么可以找到中点,然后翻转后半部分再进行对比

    合并两个有序链表

    思路

    • 双指针遍历,取出小的节点组成链表

    细节

    • 虚构一个头结点(dummyHead)

    合并k个有序链表

    思路

    • 在多个链表头取最小的节点组成链表
    • 关键是怎么比对最小的节点
      • 利用链表节点进行排序
        • 跳表
      • 利用数组结构进行排序
        • 最小堆(优先队列)
      • 循环所有节点进行比较

    寻找单链表的倒数第k个节点

    思路

    • 双指针遍历,第一个指针先走k步

    寻找单链表的中点

    思路

    • 快慢指针,一个指针走一步,一个指针走两步

    判断单链表是否包含环并找出环起点

    是否包含环的思路

    • 快慢指针遍历
      • 如果不含环,那么不会遇到null
      • 如果指针节点一样,说明两个指针在环里面相遇了

    找环起点

    • 快慢指针相遇后,两个指针同步移动速度,一个从起点出发,遇到就是环起点

    判断两个单链表是否相交并找出交点

    思路

    • 如果链表相交,那么两链表长度为a+c,b+c
      • 那么,可以双指针遍历,当遍历完自己的链表再遍历对方的链表
      • 那么长度分别为a+c+b+c b+c+a+c
      • 因为a+c+b=b+c+a以及a+c+b+c=b+c+a+c
      • 所以如果完整遍历完会有两次相遇的机会,第一次就是在c节点的位置,也就是交点
    • 如果不想交,那么两链表长度为a,b
      • 因为a+b=b+a,所以遍历完没有相交,那么就是没有交点

    注意

    • 切换的对方的链表,如果是用null节点来跳的
    • 那么可以利用相遇的时候,是否为null节点来判断有没有相交
  • 相关阅读:
    【Leetcode_easy】852. Peak Index in a Mountain Array
    【Leetcode_easy】849. Maximize Distance to Closest Person
    【Leetcode_easy】844. Backspace String Compare
    【Leetcode_easy】840. Magic Squares In Grid
    【Leetcode_easy】836. Rectangle Overlap
    【Leetcode_easy】832. Flipping an Image
    【Leetcode_easy】830. Positions of Large Groups
    【Leetcode_easy】824. Goat Latin
    【Leetcode_easy】821. Shortest Distance to a Character
    【Leetcode_easy】819. Most Common Word
  • 原文地址:https://www.cnblogs.com/cgengwei/p/16671366.html
Copyright © 2020-2023  润新知