1】返回单链表倒数第K个元素
思路:快慢指针,快指针先走K,然后一起走,快指针=null的时候,慢指针指向的就是
2】判断两个链表是否相交,并返回交点
思路1:求出两个链表的长度,计算长度差m,长的先走m,然后一起走,如果相等则相交并第一个就是交点。
思路2:链表a和链表b一起走,a走完自己以后走b,b走完自己以后走a。如果相等则相交并第一个就是交点。
3】判断链表是否有环,环的长度,环的入口
思路:快慢指针, 快指针每次走2格,慢指针每次都1格,如果相遇则必有环。
如果再次相遇,中间慢指针走过的路程就是环的长度。
从相遇点到环入口的距离 = 从head 到环入口的距离 (因为快指针走过的路程永远是慢指针的2倍,计算公式可得)
4】对单链表进行排序
思路:遍历链表长度,后使用归并排序,时间复杂度O(nlogn)
5】奇偶链表: 将一个单链表的奇数索引排在一起,偶数索引排在一起。
思路:两个指针分别指向奇数的last,偶数的last ,同步向前next.next
6】回文链表
思路:快慢指针,当快指针到头后,满指针指向的就是中间元素/中间前一个元素(偶数个)。期间前半部分一直反转链表。
然后从中间开始两个指针往相反方向走,判断相等。