题目要求:
思路:
思路1:引入列表
思路2:双指针
代码如下:
思路1代码:
import re
# 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:
node_list = []
while pHead: # 将链表数据转存至node_list
node_list.append(pHead)
pHead = pHead.next
if len(node_list)<k or k==0: # 若k为0或者超出链表长度返回None
return None
return node_list[-k] # k合法直接返回列表[-k]即倒数第k个节点
# write code here
思路2代码:
import re
# 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:
p1 = p2 = pHead # 开始两指针均在头
while k and p1: # p1先走k步,当p1为None时退出说明此时
p1 = p1.next
k -= 1
if k!=0: # 若k不为0则说明链表长度小于k,直接返回None
return None
while p1: # 否则p1走到头,此时p2在p1前k步,即倒数第k个节点,返回k即可
p1 = p1.next
p2 = p2.next
return p2
# write code here