hot100:链表倒数k个节点- 力扣(LeetCode)
题目:
实现一种算法,找出单向链表中倒数第 k 个节点。返回该链表中倒数第k个节点。
示例一:
输入:{1,2,3,4,5},2
返回值:{4,5}
说明:返回倒数第2个节点4,系统会打印后面所有的节点来比较。
示例二:
输入:{2},8
返回值:{}
思路如下:
用双指针,可省去统计链表长度操作,算法流程为:
-
初始化双指针 pre , cur 都指向头节点 head ;
-
先令 cur 走 k 步,此时 pre , cur 的距离为 k ;
-
令 pre , cur 一起走,直到 cur 走过尾节点时跳出,此时 pre 指向「倒数第 k 个节点」,返回之即可;
注意:
1.处理 k <= 0
if k <= 0 or not pHead:return None
2.检查快指针移动时的越界
for _ in range(k):if not cur: # 此时 cur 为 None,但循环尚未完成 k 次return Nonecur = cur.next
题解如下:
class Solution:def FindKthToTail(self , pHead, k):""":type: pHead: ListNode, k: int:rtype: ListNode"""# write code hereif k <=0 or not pHead:return Nonepre, cur = pHead, pHeadfor _ in range(k):if not cur:return Nonecur = cur.nextwhile cur:pre, cur = pre.next, cur.nextreturn pre