题解 | #链表中倒数最后k个结点#

链表中倒数最后k个结点

https://www.nowcoder.com/practice/886370fe658f41b498d40fb34ae76ff9

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param pHead ListNode类 
# @param k int整型 
# @return ListNode类
#
class Solution:
    def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode:
        # write code here
        # k等于0直接返回空链表。
        if k == 0:
            return None
        # 慢指针。
        slow = pHead
        # 快指针。
        fast = pHead

        # 快指针后移k-1次,当k-1 > 0时如果fast为空,则说明k大于原链表的长度。
        while k-1 and fast:
            fast = pHead.next
            pHead = pHead.next
            k -= 1
            # 如果链表长度小于k则返回空链表。
            if k and pHead is None:
                return pHead
        
        # k-1 > 0并运行到这一步,说明k大于原链表的长度,应返回一个空链表。
        if k-1:
            return slow

        # 快慢指针同时后移,慢指针指向的位置就是最后k个元素的头节点位置。
        while fast.next:
            slow = slow.next
            fast = fast.next

        return slow

全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
04-08 00:50
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务