数据结构与算法-链表(三):剑指offer-输出链表中倒数第k个节点(快慢指针的应用)

输出链表中倒数第k个节点

一、题目

输入一个链表,输出该链表中倒数第k个节点

二、思路

2.1 什么是快慢指针

快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。

2.2 本题可以借用快慢指针来解决

可以定义两个指针,第一个指针从链表的头指针开始遍历向前走k步,第二个指针保持不动;第一个指针走了k步之后,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k,当第一个指针到达链表的尾节点时候,第二个指针正好是倒数第K个节点
在这里插入图片描述

for i in range(k):
	if firstpoint = none:	# 判断条件放在这里的意思是firstnode可以是none只不过下一个节点不能为none
		return none
	firstpoint = firstpoint.next  # 极端情况下这里可以为none,如上图
	

2.3 代码

# -*- 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
        ## 先定义两个指针,让第一个指针先走k,第二个指针再走
        firstPoint = head
        secondPoint = head
        for i in range(k):
            if firstPoint == None:
                return None
            firstPoint = firstPoint.next
            
        while firstPoint != None:
            firstPoint = firstPoint.next
            secondPoint = secondPoint.next
            
        return secondPoint
发布了49 篇原创文章 · 获赞 2 · 访问量 1821

猜你喜欢

转载自blog.csdn.net/liuluTL/article/details/104969772