【剑指 Offer】22,链表中倒数第k个节点。 难度等级:简单。思路:快慢指针

news/2024/11/24 9:00:09/

文章目录

    • 1. 题目
    • 2. 我的解法:遍历两次链表
    • 3. 更优解法:快慢指针,遍历一次链表

1. 题目

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。

例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。

示例:

给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.

2. 我的解法:遍历两次链表

思路:

第一次遍历链表,获得链表长度;
第二次遍历链表,找到第 length-k 个节点并返回。

code:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:# 第一次遍历链表,获得链表长度length=1tail=headwhile tail:tail=tail.nextlength+=1# 第二次遍历链表,找到第 length-k 个节点并返回start=1while start!=length-k:head=head.nextstart+=1return head

分析:时间复杂度为 O(n),空间复杂度为 O(1)

3. 更优解法:快慢指针,遍历一次链表

思路:快慢指针

首先让 slow 指向头节点,fast 指向第 k+1 个节点;
然后让 slow 和 fast 同步向后走,当 fast 指向链表的尾部空节点时,返回 slow 即可。

code:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:# 快慢指针:始终让 fast 指针领先 slow 指针 k 个节点slow=headfast=headfor _ in range(k):fast=fast.next# 当 fast = None 时返回 slowwhile fast:slow=slow.nextfast=fast.nextreturn slow

分析:时间复杂度为 O(n),空间复杂度为 O(1)


http://www.ppmy.cn/news/283150.html

相关文章

CPU多核心和单核心的区别在哪?

大家都知道服务器有单核心以及多核心的区别,那么这两个区别大吗?CPU主要功能是解释计算机指令以及处理计算机软件中的数据。CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成。那么CPU多核心和单核心的区别在哪? …

单核多线程与多核多线程

单核多线程与多核多线程 或许有些同学对于单核多线程和多核多线程有点误区,因为会听到一些同学问为什么单核能处理多线程,总结了一些干货,下面会通俗说明下。 线程和进程是什么 线程是CPU调度和分配的基本单位(可以理解为CPU只…

酷睿双核之解析

【酷睿双核名字的由来】 酷睿是英文单词core的音译,意为“核心”,所以酷睿双核就是双核处理器的意思。 英特尔酷睿双核处理器是基于英特尔桌面、移动、WOODCREST服务器架构的处理器,能够提供超强性能和超低功耗。 “酷睿”是一款领先节能的新…

了解身边的超线程、双核、双cpu

一、从三者的工作原理和概念理解:   (1)超线程(HT):   超线程(Hyperthreading Technology)技术就是通过采用特殊的硬件指令,可以把两个逻辑内核模拟成两个物理芯片,在单处理器中实现线程级的并行计算,同时在相应的软硬件的支持下大幅…

CPU多核心和单核心有哪些区别?

最近小编收到蛮多客户在问CPU多核心和单核心的区别大不大,在CPU上该如何做选择,今天简单给大家来说一说,CPU主要功能是解释计算机指令以及处理计算机软件中的数据。CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构…

奔腾双核和酷睿双核的区别(转)

对于选择笔记本,CPU是重中之重,直接关系到运算的速度和整个笔记本的性能现在笔记本市场上,主打的也就是AMD和INTEL,由于2006年底到2007年初,AMD连续推出了一系列的双核产品,以其低廉的价格和较好的性价比抢…

【历史上的今天】9 月 8 日:阿里开放平台计划;英特尔发布首款双核酷睿处理器;我国研制全数字高清晰度电视系统

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2021 年 9 月 8 日,在 1956 年的今天,中国成功试制新型喷气式飞机,让蔚蓝的天空上响彻中华雄狮的咆哮。而在计算机领域,…

主流双核处理器对比

高通MSM8260/8660 高通的处理器可能是市面上最为常见的了,首先我们就来看一下高通的双核处理器。 现如今手机上使用的高通MSM8260和MSM8660这两款处理器除去支持的网络制式不一样和各机型默认的主频有所差异之外并没有其他区别,所以我们挑选了两款比较有…