输出链表中倒数第k个节点
一、题目
输入一个链表,输出该链表中倒数第k个节点
二、思路
2.1 什么是快慢指针
快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。
2.2 本题可以借用快慢指针来解决
可以定义两个指针,第一个指针从链表的头指针开始遍历向前走k步,第二个指针保持不动;第一个指针走了k步之后,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k,当第一个指针到达链表的尾节点时候,第二个指针正好是倒数第K个节点
for i in range(k):
if firstpoint = none: # 判断条件放在这里的意思是firstnode可以是none只不过下一个节点不能为none
return none
firstpoint = firstpoint.next # 极端情况下这里可以为none,如上图
2.3 代码
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def FindKthToTail(self, head, k):
# write code here
## 先定义两个指针,让第一个指针先走k,第二个指针再走
firstPoint = head
secondPoint = head
for i in range(k):
if firstPoint == None:
return None
firstPoint = firstPoint.next
while firstPoint != None:
firstPoint = firstPoint.next
secondPoint = secondPoint.next
return secondPoint