链表中倒数第k个节点

image.png

这个问题在作业帮面试的时候遇到了,哭哭:( ,都怪自己没有提前开始看书,再看半天就看到这里了,总是在浪费时间,哼╭(╯^╰)╮

首先最简单的方法是遍历一遍链表,算出n,然后遍历到第n-k个即可

面试官期待的是只需要一次遍历的算法:
要用两个指针,P1先走k-1步,到达第k个位置上,然后两个指针一起走,当P1走到尾部的时候,P2所指的位置就是倒数第k个位置

要注意的点
当链表中节点个数不够k个:返回空
头指针为空
k为0

代码如下:

# -*- 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
        p1 = head
        p2 = head
        for i in range(k):
            if p1 == None:
                return None
            p1 = p1.next
        while p1!=None:
            p1 = p1.next
            p2 = p2.next
        return p2
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容