class Solution:
def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
# 递归
# 思路类型下面只是把while循环改成了递归:
1.定义一个快慢指针,初始化快指针在慢指针前面第k个节点
2.递归往后走直到走到快指针的下一个为空,返回此时的慢指针
if not head:
return
left = right = head
while k > 1 and right:
right = right.next
k -= 1
def getKth(left, right):
if not right.next:
return left
left = left.next
right = right.next
if not right:
return left
left= getKth(left, right)
return left
left = getKth(left, right)
return left
# 非递归
# 思路:
1.定义一个快慢指针,初始化快指针在慢指针前面第k个节点
2.同时往后走,直到链表尾结点时,慢指针即为链表中倒数第k个节点
if not head:
return
fast = pHead
slow = pHead
#快指针先行k步
for i in range(0,k):
if fast != None:
fast = fast.next
#达不到k步说明链表过短,没有倒数k
else:
return None
#快慢指针同步,快指针先到底,慢指针指向倒数第k个
while fast:
fast = fast.next
slow = slow.next
return slow