LeetCode链表题小记

本文将LeetCode上大部分链表类题,按照思路整理在一块。

比较巧妙的题

  • 138 复制带随机指针的链表:三部曲
  • 141 环形链表
  • 142 环形链表 II
  • 160 相交链表

二分、递归、合并

  • 21 合并两个有序链表
  • 23 合并K个排序链表:二分+递归,类似归并递归排序
  • 109 有序链表转换二叉搜索树:二分+递归
  • 148 排序链表:二分+递归

用链表表示一个数(逆序或正序),两数相加

  • 2 两数相加
  • 445 两数相加 II :需要双栈

链表翻转:定位待翻转区间前一个结点p1,得到区间第一个结点p2,持续拎出p2->next插到p1后面

  • 206 反转链表:全部翻转
  • 92 反转链表 II:指定区间翻转
  • 24 两两交换链表中的节点
  • 25 K 个一组翻转链表
  • 234 回文链表
  • 143 重排链表:L1/Ln/L2/Ln-1...

删除结点:也需要定位前面一个结点

  • 203 移除链表元素:删除结点值等于给定值的结点
  • 83 删除排序链表中的重复元素:保留第一个重复元素
  • 82 删除排序链表中的重复元素 II:不保留第一个重复元素
  • 19 删除链表的倒数第N个节点:需要确保N为有效值,然后夹板
  • 237 删除链表中的节点:无返回值地删除指定结点,乾坤大挪移
  • 面试题 02.01 移除重复节点:删除未排序链表中的重复节点,保留最开始出现的节点,需哈希表

直白题

  • 61 旋转链表:首尾相接再切断
  • 86 分隔链表:左右小推车
  • 147 对链表进行插入排序

类似思想题

  • 202 快乐数。第一版思路:首先数不会一直膨胀下去,会保证在三位数以内;因此走了几百步以内必然会重复;判断终止条件就是遇到1或者重复数,可以数组/哈希表/集合来记录。优化思路:一系列数可以看做一个链表,重复数就变成了链表有环问题,用快慢指针。
原文地址:https://www.cnblogs.com/inchbyinch/p/13021086.html