题解 | #输出单向链表中倒数第k个结点#

输出单向链表中倒数第k个结点

http://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d

仿照一位c++大佬的答案,写了python的双指针
# 双指针

class ListNode(object):
    def __init__(self, val=None, next=None):
        self.val = val
        self.next = next
       
       
def GetKthFromTail(head: ListNode, k):
    p_fast, p_slow = head, head  # init 快慢指针
    for i in range(k):
        if p_fast:
            p_fast = p_fast.next
        else:  # 快指针先行k步, 如果不能到达k步, 则说明链表长度不够
            return None
        
    while p_fast:  # 同步快慢指针, 快指针探底, 则慢指针抵达倒数第K个
        p_fast = p_fast.next
        p_slow = p_slow.next
    return p_slow


if __name__ == "__main__":
    while True:
        try:
            L, ls, k = int(input()), input().split(), int(input())

            head = ListNode(ls[0])
            cur = head
            for i in range(1, L):  # 输入链表
                cur.next = ListNode(ls[i])
                cur = cur.next

            if k:
                p_Kth = GetKthFromTail(head, k)
                if p_Kth:
                    print(p_Kth.val)
                else:
                    print('0')
            else:
                print('0')
        except:
            break

全部评论
这是我见过最清晰的答案,赞一个
点赞 回复 分享
发布于 2022-12-07 08:15 北京
赞,前面很多回答根本不符合题目要求
点赞 回复 分享
发布于 08-16 17:34 北京

相关推荐

10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
19 16 评论
分享
牛客网
牛客企业服务