剑指Offer编程题-链表中倒数第k个节点

题目:链表中倒数第k个节点

题目描述:输入一个链表,输出该链表中倒数第k个结点。

解题思路

输入链表head和结点数k,定义一个结点a = headhead往后遍历k次之后,a也同时和head一起往后遍历,当head遍历完整个链表后,a指向的结点正好是倒数第k个结点。需要注意当k大于链表的结点数时要返回空值,我们通过k的自减控制a开始遍历的时间,正好在最后也可以通过k是否大于0判断k是否大于链表结点数。

实现

python

# -*- 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:
            return None
        a = head
        while(head):
            if k <= 0:
                a = a.next
            head = head.next
            k -= 1
        return a if k<=0 else head