跟着labuladong刷题笔记开始刷题,好多年没有做过题了,近几年除了应付考试外,都是些文档性质的工作,近期开始准备紧跟dalao步伐,重新学习。
合并两个有序链表:双指针
合并 k 个有序链表:优先级队列、最小堆,后续还需要继续学习)
寻找单链表的倒数第 k 个节点:只遍历一次的双指针解法
寻找单链表的中点:双指针解法,fast=fast.next.xet
判断单链表是否包含环并找出环起点:双指针解法,fast=fast.next.next,当slow与fast相遇
判断两个单链表是否相交并找出交点:双指针,fast比slow多走了环的长度k的整数倍。所以相遇时slow走了k,环起点与相遇点距离m,head距离环起点k-m,环为k,fast再走k-m。
两个链表是否相交:P1遍历A再遍历B,P2遍历B再遍历A,P1==P2为条件
反转链表:(1)整个反转链表(2)递归(3)后驱节点记录(4)反转之后的head节点和后面的节点连起来。
反转列表的一部分:前进到反转的起点触发
K个一组反转:递归的反转一部分链表(1)先反转以head开头的K个元素,将K+个元素作为head调用reverseKGroup函数(3)不足k个,不需要反转
判断回文链表:寻找回文串的核心思想是从中心向两端扩展,采用栈的思想,不断递归。