题解 | #链表中倒数最后k个结点#
链表中倒数最后k个结点
https://www.nowcoder.com/practice/886370fe658f41b498d40fb34ae76ff9
1. 方法一:利用数组
# class ListNode: # def __init__(self, x): # self.val = x # self.next = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param pHead ListNode类 # @param k int整型 # @return ListNode类 # 空间复杂度 n class Solution: def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode: # write code here if k<=0: return None a = [] cur = pHead count = 0 while cur : count+=1 a.append(cur) cur = cur.next if count>=k: return a[count-k] else: return None
2. 方法二:双指针 先后指针
倒数第k个节点,就先让先指针先走K步,最后停下的时候,输出后指针指向的节点就行
# class ListNode: # def __init__(self, x): # self.val = x # self.next = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param pHead ListNode类 # @param k int整型 # @return ListNode类 # class Solution: def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode: # write code here fast = slow = pHead count = k # 快指针先行k步 while fast and count : count-=1 fast = fast.next if count ==0: break # 注意是否走了 k 步 没走到就说明链子太短了 if count > 0: return None # 快慢指针同步,快指针先到底,慢指针指向倒数第k个 while fast: fast = fast.next slow = slow.next return slow
剑指offer刷题笔记 文章被收录于专栏
24秋招剑指offer刷题的笔记