剑指 Offer 22. 链表中倒数第k个节点

Offer 22

常规解法

  • 常规解法其实很容易可以想到,只需要先求出链表的长度,然后再次遍历取指定长度的链接即可。
package com.walegarrett.offer;

/**
* @Author WaleGarrett
* @Date 2021/1/26 20:10
*/ /**
* 题目分析:
* 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
* 例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。
*/
/**
* 解法一:暴力解法,先遍历得出初始链表的长度,然后再次遍历找到指定长度的链表
*/
public class Offer_22 {
public ListNode getKthFromEnd(ListNode head, int k) {
int num = 0;
ListNode current = head;
while(current != null){
int val = current.val;
current = current.next;
num++;
}
current = head;
int index = 0;
while(current != null){
if(index == num - k){
break;
}
index++;
current = current.next;
}
return current;
}
}

双指针的方法

  • 可以设置一种类似于快慢指针的方法来找到后k个元素,将快慢指针的间隔设置为k,类似于窗口的长度。
  • 当快指针到达链表尾即表示遍历结束,满指针的位置即要求的链表头指针位置。
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
ListNode slower = head, faster = head;
for(int i =0 ;i<k; i++){
if(faster != null)
faster = faster.next;
}
while(faster != null){
faster = faster.next;
slower = slower.next;
}
return slower;
}
}

剑指 Offer 22. 链表中倒数第k个节点的更多相关文章

  1. 力扣 - 剑指 Offer 22. 链表中倒数第k个节点

    题目 剑指 Offer 22. 链表中倒数第k个节点 思路1(栈) 既然要倒数第k个节点,那我们直接把所有节点放到栈(先进后出)里面,然后pop弹出k个元素就可以了 代码 class Solution ...

  2. LeetCode 剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点 题意 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. ​ 例如,一个链表有 6 个 ...

  3. 《剑指offer》 链表中倒数第k个节点

    本题来自<剑指offer> 链表中倒数第k个节点 题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 倒数第k个节点,而且只能访问一遍链表,定义两个节点,两者之间相差k个距离,遍历 ...

  4. 【剑指Offer】链表中倒数第k个节点 解题报告(Python)

    [剑指Offer]链表中倒数第k个节点 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  5. 【Java】 剑指offer(22) 链表中倒数第k个结点

    正文 本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的 ...

  6. [剑指offer] 14. 链表中倒数第K个节点+翻转+逆序打印+合并两个排序链表 + 链表相交(第一个公共节点) (链表)

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路:  两个指针,起始位置都是从链表头开始,第一个比第二个先走K个节点,当第一个走到链表尾时,第二个指针的位置就是倒数第k个节点.(两指针始终相 ...

  7. 剑指OFFER之链表中倒数第k个节点(九度OJ1517)

    题目描述: 输入一个链表,输出该链表中倒数第k个结点.(hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为两个整数n和k(0<= ...

  8. 【剑指offer】链表中倒数第k个节点,C++实现(链表)

    1.题目 输入一个链表,输出该链表中倒数第k个结点.链表的尾节点是倒数第一个节点. struct ListNode { int val; struct ListNode *next; } 2.思路   ...

  9. 剑指Offer:链表中倒数第k个结点【22】

    剑指Offer:链表中倒数第k个结点[22] 题目描述 输入一个链表,输出该链表中倒数第k个结点. 解题思考 我们定义两个指针L和R,R事先移动K-1个位置,然后两者同时往后移动直到遇到R的下个节点为 ...

随机推荐

  1. Codeforces Round #667 (Div. 3) E. Two Platforms (双指针)

    题意:有\(n\)个点往下落,你可以在最下面放两个长度为\(k\)的板子,问做多能接到多少个点. 题解:这题给纵坐标\(y\)完全没有用,我们先对横坐标\(x\)排序,然后从左边开始枚举,用\(l[i ...

  2. SQL Server 远程连接配置

    打开sql server配置工具 SQL Server网络配置→SQLEXPRESS的协议→启用TCP/IP→右键属性→IP地址→IPALL端口修改为1433→重启SQL Server服务 https ...

  3. XV6学习(16)Lab net: Network stack

    最后一个实验了,代码在Github上. 这一个实验其实挺简单的,就是要实现网卡的e1000_transmit和e1000_recv函数.不过看以前的实验好像还要实现上层socket相关的代码,今年就只 ...

  4. CentOS 7 升级内核版本

    1.查看当前内核版本 $ uname -r 3.10.0-514.el7.x86_64 $ uname -a Linux k8s-master 3.10.0-514.el7.x86_64 #1 SMP ...

  5. Python——Django框架——邮件

    #引用EMAIL服务 EMAIL_BACKEND = 'django.cpre.mail.backends.smtp.EmailBackend' #EMAIL发送服务器 EMAIL_HOST = 's ...

  6. Leetcode(106)-从中序与后序遍历序列构造二叉树

    根据一棵树的中序遍历与后序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7 ...

  7. 转换 React 为TypeScript

    转换 React 为TypeScript JavaScript import React from 'react'; import PropTypes from 'prop-types'; class ...

  8. github & webhooks

    github & webhooks git auto commit bash shell script https://developer.github.com/webhooks/ POST ...

  9. html fragment & html template & virtual DOM & web components

    html fragment & html template & virtual DOM https://developer.mozilla.org/en-US/docs/Web/API ...

  10. html 布局,上下各100px,中间自适应

    flex <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...