题目
输入一个链表,输出该链表中倒数第k个结点。
思路
设置两个指针,一个指向开头(p1),一个指向距离p1 k-1步的位置(p2),当两个同时开始走时,p2走到链表尾部的时候,p1到达链表的倒数第k个位置。
注意
1、边界情况:输入链表为空、k小于等于0,则查找节点就没有意义了,因此返回None;
2、若链表长度小于k,则会出现链表指向None的情况,因此要在循环中添加if进行判断。
代码
# -*- 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
if head == None or k <= 0: # 边界条件,返回None
return None
p1 = head # 第一个指针
p2 = head # 第二个指针
## 第二个指针先走k-1步
for i in range(k-1):
if p2.next != None:
p2 = p2.next
else:
return None
## p1、p2同时开始走
while p2.next != None:
p2 = p2.next
p1 = p1.next
return p1