单链表输出倒数第k个元素java实现

查找单链表中倒数第k个位置上的结点 题目(2009统考真题): 已知一个带有表头结点的单链表,结点结构为 假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。若查找成功,算法输出该结点的data值,并返回1;否则,只返回0。要求: (1) 描述算法的基本设计思想 (2) 描述算法的详细实现步骤 (3) 根据设计思想和实现步骤,采用程序设计语言描述算法(使用C或C++或JAVA语言实现),关键之处请给出简要注释。 基本设计思想 : 定义两个指针变量p和q; 初始时 阅读详情

单链表输出倒数第k个元素
简单粗暴直接思路:遍历两次,第一次遍历整个列表确定长度n,而倒数第k个即第n-k-1(注意起点为0)个,第二次遍历走n-k-1步即可获得答案。缺点:节点数量较多时,节点从硬盘到物理内存的读写是一个耗时操作。
巧妙的方法:定义两个指针,我们都知道倒数第k个距离最后一个的距离是k-1,所以可以先移动一个指针走k步后,然后两个指针同时移动,那么在快的指针到达结尾时,慢的指针到达的位置正好是倒数第k个。

//如何找出单链表中的倒数第k个元素

class Node{
  Node next=null;
  int data;
  public Node(int data){
    this.data=data;
  }
}

public class findKelem {
  public static Node method(Node head,int k) {
    if(k<0) {
      return null;
    }
    Node p1=head;
    Node p2=head;
    for(int i=0;i<k&&p1!=null;++i) {
      p1=p1.next;
    }
//    if(p1==null) {不注释掉这一部分在输出顺数第一个数据时会报数组越界
//      System.out.print("p1 is null!");
//      return null;
//    }
    while(p1!=null) {
      p1=p1.next;
      p2=p2.next;
    }
    if(p2 == null)
    	System.out.println(head.data);
    return p2;
  }


  public static void main(String[]args)
  {
    Node head = new Node(0);
    head.next = new Node(1);
    head.next.next = new Node(2);
    head.next.next.next = new Node(3);
    findKelem test = new findKelem();
    Node result = test.method(head, 1);
    System.out.println(result.data);
  }
 
}

 

取单链表倒数第k个元素 取单链表倒数第k个元素,包括算法描述、算法思想,算法实现等 立即下载

相关推荐

swupdate-签名验证

swupdate加密部分具体在中可以查看。

qq_28219531的博客 1148

单向链表中倒数第k个值

本文参考书籍 《剑指offer》 作者何海涛 01 题目 输入一个单向链表, 输出该链表中倒数第k个结点。 如一个链表中有6个结点,1,2,3,4,5,6; 这个链表的倒数第三个节点是值为4的结点。 链表结构如下: 02 解题 解法1:获取链表的第k个值,如果可以知道链表长度n,那么可以知道从0开始第n-k的值是要获取的元素。但是我们需要先遍历一次链表获得数组长度,然后在遍...

圆圆的汤圆的博客 1804

PHP 对接建行生活订单推送接口

php对接建行订单推送

qq_43647026的博客 562

单链表查找倒数第k个元素

要求:只使用一次循环 算法思路:使用两个指针p,q;把指针p,q,都指向第一个元素,p先开始向右运动k个位置后 q再开始运动,当pyu

LMZYD的博客 3239

pgpool-II踩坑日记两则

最近结合pgpool-II进行postgreSQL高可用的部署,过程非常煎熬,作为新手,公司也没有前辈熟悉postgreSQL,只能自己摸索。好在已经搞明白了,把困扰我很长时间的两个问题分享一下。 1. show pool_nodes 第一个问题就是 show pool_nodes 的使用,照着教程建好后,在哪里执行这个指令呢?我在pg服务器上怎么执行这个指令都显示 ERROR: unrecognized configuration parameter "pool_nodes",一度怀疑人生。翻阅了很多资料

zhaizhai6_6的博客 4540

【自动驾驶】汽车智能驾驶计算芯片

本文介绍汽车智能驾驶计算芯片的软硬件要求、 可靠性和安全性要求、 性能要求,和相应的试验方法。除了用于汽车智能驾驶, 其他领域的计算芯片可参照执行。

Mr.Cssust的博客 2631

【算法】Java-求单链表倒数第k个元素

【算法】Java-求单链表倒数第k个元素 问题 找出单链表的倒数第K个元素,例如给定链表 1–>2–>3–>4–>5–>6 ,则单链表的倒数第K=3个元素为4。 思路分析 方法一: 顺序遍历两遍法 1)首先遍历一遍链表,计算出链表中的节点数n; 2)把倒数第k个数,转成正数第n-k个元素; 3)遍历链表,找到第n-k个元素。 方法二:快慢指针法 1)可以定义两个快慢指针; 2)快慢指针步长为k,然后一起移动; 3)快指针到链表尾部时,慢指针就正好指向倒数第K个元素。 第二

weixin_44175122的博客 665

数学工具箱:Clarke与Park变换

本文详细解析了FOC(磁场定向控制)中的核心数学工具——Clarke变换与Park变换。首先阐述了坐标变换的必要性:将复杂的三相交流系统简化为直流系统,便于精确控制。Clarke变换将三相静止坐标系转换为两相静止坐标系,减少变量数量;Park变换进一步将两相静止坐标系转换为两相旋转坐标系,实现交流量到直流量的转换。文章提供了两种变换的数学公式、物理意义图解及C语言实现代码,并简要介绍了逆变换过程。这些变换为电机控制提供了关键的数学基础,后续将结合GD32F303的FPU特性进行优化实现。

汽车电子软件领域知识分享 180

如何找出单链表中倒数第K个元素

第一种方法 为了找出单链表的倒数第K个元素,需要知道这个单链表的长度是多少,就是需要遍历一遍这个单链表,长度为n,倒数第k个,就是单链表的第(n-k)个元素 public Node findLastK(Node head, int k){ Node pNode = head; int n=0; while (pNode.next != null){ n++; pNode = pNode.next;

nihaoma1203的博客 5640

【LLC快速上手系列】如何在LLC谐振里优雅地调死区时间?

用示波器死盯Vds波形,找到ZVS临界点;别听“经验值”,亲自调才准;死区时间并非越短越好,也不是越长越稳,而是要“刚刚好”;用热成像看MOSFET温升变化,ZVS调好了,温度马上掉2~5℃;轻载难ZVS?适当提升频率 or 降低Lr可破!

weixin_43199439的博客 493

AI应用架构师收藏:大规模AI系统AIOps智能运维的4个落地案例

本文精选互联网、金融、制造、电信四大行业的大规模AI系统AIOps落地案例,覆盖云原生AI平台、风控AI系统、工业AI质检、5G网络AI优化等典型场景。行业背景与系统规模:业务目标、AI系统架构、运维挑战;AIOps解决方案设计:数据采集层→分析层→决策层的全栈架构,技术栈选型与理由;核心技术实现细节:异常检测算法、根因分析模型、自动化恢复流程(含Python代码示例);实施效果与经验总结:关键指标对比、踩坑教训、架构师视角的最佳实践。

AI天才研究院 856

LeetCode之返回单向链表倒数第 k 个节点的值

题目: 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 示例: 输入: 1->2->3->4->5 和 k = 2 输出: 4 说明: 给定的 k 保证是有效的。 思路: 设置2个指针p和q都指向head,p先向前移动 k-1 个结点,接着,p,q一起移动,直到q.next = null,此时q指针所指的结点就是要找的结点。 例如下图(将每个格子看成链...

空调不够冷 665

【反蒸馏实战 00】AI抢不走的工作:一份针对30个“高危”职位的“反取代”实战手册(反蒸馏计划启动)

AI时代职场生存指南:30个技术岗位的“反蒸馏”实战策略 随着AI技术快速发展,职场正面临前所未有的结构性重构。本系列专栏聚焦30个技术岗位,深入分析AI对各职位的影响路径,并提供系统性的"反蒸馏"策略。通过5层分析框架(AI冲击现状、核心价值解构、AI天花板、能力升级路径、人机协作模式),帮助从业者识别可替代任务与核心价值,建立不可替代的专业优势。内容涵盖IT开发、数据分析、产品管理等技术领域,为职场人提供从“被AI替代”到“与AI协同”的转型路线图,守护职业价值。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1651

【java】单链表输出倒数第k个元素java实现

class Node{ Node next=null; int val; public Node(int val){ this.val=val; } } public class Find{ public static Node FindKthToTail(Node head,int k){//方法1 int sum=0; for(Node cur=head;cur!=n...

falime的博客 657

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数据结构与算法~数据结构之单链表

总结下来主要的难度是确定当前的是否是最后一个元素,很多时候要将这种情况区分开来处理,有点麻烦。 其实链表的处理自我感觉还是比较简单的 public class test { public static void main(String[] args){ SingleLinkedListHead head=new SingleLinkedListHead(); head.add( new StudentNode( 1,"张三" ) ); head

yucan1234的博客 181

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

遍历单链表实现 java_Java实现单链表的各种操作

主要内容:单链表的基本操作删除重复数据找到倒数第k个元素实现链表的反转从尾到头输出链表找到中间节点检测链表是否有环在不知道头指针的情况下删除指定节点如何判断两个链表是否相交并找出相交节点直接上代码,就是这么奔放~~~package pers.ty.$1101datastructure;import java.util.Hashtable;/*** @author Administrator* 实现...

weixin_29664063的博客 808

Java泛型链表实现

链表简介 代码实现 package com.chenxixuexi; /** * 泛型链表 * 单链表逆置数据--节点 * 求单链表倒数第K节点 * 求两个单链表 是否相交 相交交点 * 判断单链表是否有环?有求出环的入口点 求环的长度? * 合并两个递增的单链表 * @author 14831 * * @param &amp;lt;T&amp;gt; */ public cl...

咸鱼塘 1201

数据结构之单链表的几个简单算法题

单链表作为最基本的数据结构,在程序设计中有着非常重要的运用。最近自己闲下来,正在整理数据结构和算法的一些程序题,现将自己的代码贴出来与大家分享。如有不对之处,请大家指正。(好吧 ,这么简单的题目应该不会有错,都测试过了。况且说的好像很多人看我博客一样。好久没更,都长草了……就当做写给自己看的吧。:P) package test; import java.util.Hashtable;

别让现实一步步侵吞你最初的梦想 1079

单链表简易教程

一、概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。 链式存储结构的线性表将采用一组任意的存储单元存放线性表中的数据元素。由于不需要按顺序存储,链表在插入、删除数据元素时比顺序存储要快,但是在查找一个节点时则要比顺序存储要慢 使用链式存储可以克服顺序线性表需要预先知道数据大小的缺点,链表结构可以充分利用内存空间,实现灵活的内存动态管...

好好学java 1167

输出单链表倒数第K个节点-Java

题目描述: 输出一个单向链表,找出倒数第k个结点的值 输入描述: 1.输入链表结点的个数 2.输入链表的值 3.输入k的值 示例1: 输入: 8 1 2 3 4 5 6 7 8 7 输出: 2 代码: 方法一:用LinkedList实现 import java.util.LinkedList; import java.util.Scanner; public class Test { s...

a215012954的博客 2360

输出单链表中倒数第k个结点

题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下: struct ListNode {       int       m_nKey;       ListNode* m_pNext; }; 分析:为了得到倒数第k个结点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。可是输入的是单向链表,只有从前往后的指针而没有从后往前的指针

tanyujing的专栏 3180

查找单链表的倒数第 K 个节点【Java实现】

查找单链表的倒数第 K 个节点【Java实现】[链表操作技巧]

weixin_42326851的博客 1684

找出单链表中的倒数第k个数

找出单链表中的倒数第k个数 题目: 找出单链表中的倒数第k个数,如给定单链表:0–>1->2–>3–>4–>5->6->7,则单链表中的倒数第3个数为5. 解题思路: 思路1:二次遍历求解 第一次遍历链表求出链表的总长度,第二次遍历到n-k求出链表的的倒数第k个元素。 代码实现: public static LNode findLastkNode(LN...

qq_45403860的博客 2952

求单链表的倒数第k个元素

这是个简单的小题,由于学习Java,所以写写。求单链表的倒数第k个元素。这是一个常规题,可以设置两个指针pa,pb:先让其中一个pa顺序找到顺数第k个节点,然后两个指针一起跑,直到pa=null,此时pb指向的就是倒数第k个。如图:                                                                    贴段代码: class

晓风残月xj 1199

Java:如何找出单链表中的倒数第k个元素

设置两个指针,相差k个节点。//如何找出单链表中的倒数第k个元素 public class findelem { public static Node method(Node head,int k) { if(k<1) { return null; } Node p1=head; Node p2=head; for(int i=0;i<k-1&&p1!=null;i++

model1220的学习之路 2378

如何找出单链表中的倒数第K个元素--Java版

在单链表中,如果要找出倒数第K个元素,可以从头节点开始遍历,先记录链表长度N,然后再从头节点开始遍历,找到第(N - K + 1)个节点即可。但是这种方法需要进行两次遍历,效率较低。我们可以通过一次遍历的方式来查找倒数第K个元素。

迷路的小绅士之家 1016
上一篇: leetcode刷题_OJ 226反转二叉树
下一篇: 100万个数据里面找出100个最大的
yanchen7788
博客等级 码龄8年 6粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值