题意
输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。
如果该链表长度小于k,请返回一个长度为 0 的链表。
思路
- 思路一(常规):
先遍历一次链表找到链表长度n
,从头节点往后遍历n−k
次即可找到链表中倒数最后k个结点。 - 思路二(双指针):
代码
- 常规思路:
class Solution:
def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode:
# write code here
p = pHead
n = 0
while p:
n += 1
p = p.next
if n < k:
return None
for i in range(n-k):
pHead = pHead.next
return pHead
- 双指针思路:
class Solution:
def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode:
# write code here
f = s = pHead
while f and k>0:
f = f.next
k -= 1
if k > 0:
return None
while f:
f = f.next
s = s.next
return s