本文主要是介绍[牛客网刷题 Day3] JZ23 链表中倒数最后k个结点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
思考:
记录下链表总长度,算出总长度,再从前往后遍历。
class Solution:def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode:# write code herelen = 0dummy = pHeadwhile pHead:len = len +1pHead=pHead.nextif k>len:return None for i in range(len-k):dummy = dummy.nextreturn dummy
看了一下答案,原来可以直接用list保存所有节点,最后返回l[:-k]
;不过这样做耗时和内存都更高。
最巧妙的是双指针的解法:采用双指针,一快一慢,快的指针比慢的指针多走k步 当快的指针走到none时,返回慢的指针即为倒数k个。
哇!太巧妙了!
假设总长度为m
,快的先走k
步,慢的再开始;那等快指针走了m-k
步走到尽头,慢指针剩余m-(m-k)=k
:
def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode:# write code herefast = slow = pHeadfor i in range(k):if fast is None:return Nonefast=fast.nextwhile fast:fast = fast.nextslow = slow.nextreturn slow
这篇关于[牛客网刷题 Day3] JZ23 链表中倒数最后k个结点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!