[剑指Offer][python] 面试题22:链表中第倒数第k个节点

题目

输入一个链表,输出该链表中倒数第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-1for 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值