单向链表中查找倒数第K个数

标签: 单项链表中倒数第K个数
5人阅读 评论(0) 收藏 举报
分类:

问题

单向链表如果要找某一元素或者遍历链表,只能从头节点开始,所以如果我们用普通方法查找倒数第K个数,要分两步:第一步:先遍历链表中元素的个数,第二步:从头开始遍历,遍历到链表个数-k个数;

用两个指针来快速找到倒数第k个数

package com.tangbaobao.baidu;

import java.time.temporal.Temporal;
import java.util.Scanner;

/**
 * 链表找倒数第k个数
 *
 * @author 唐学俊
 * @create 2018/04/17
 **/

public class FindNumResverseOrder {
    /**
     * 节点内部类
     */
    class Node {
        private Node nextNode;
        private int value;

    }

    /**
     * 设置头节点
     */
    private Node head;

    public static void main(String[] args) {
        FindNumResverseOrder order = new FindNumResverseOrder();
        //添加数据
        order.add(1);
        order.add(2);
        order.add(3);
        order.add(4);
        order.add(5);
        Scanner scanner = new Scanner(System.in);
        System.out.println("你要查找链表中倒数第几个数?");
        int k = scanner.nextInt();
        int num = order.getNum(k);
        System.out.println(num);
    }

    public void add(int i) {
        //定义新节点,并设置值
        Node newNode = new Node();
        newNode.value = i;


        //第一次添加
        if (head == null) {
            head = newNode;
        } else {
            //设置中间节点
            Node temp = head;
            //非第一次添加
            while (temp.nextNode != null) {
                temp = temp.nextNode;
            }
            temp.nextNode = newNode;
        }
    }


    /**
     * 代码说明:没有做越界分析,所有测试用例都基于给定范围
     *
     * @param k
     * @return
     */
    public int getNum(int k) {
        //定义连个指针,开始都指向头节点
        Node nodej = head;
        Node nodei = head;
        //先移动k步
        for (int l = 0; l < k - 1; l++) {
            nodej = nodej.nextNode;
        }
        //i,j同时后移,直到j到达最后一个元素,这是i所指向的元素就是第倒数第k个
        while (nodej.nextNode != null) {
            nodei = nodei.nextNode;
            nodej = nodej.nextNode;
        }
        return nodei.value;
    }
}

时间复杂度:o(n)
空间复杂度:o(1)

查看评论

链表中倒数第k个结点java

题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。 思路:两个指针,需要注意链表总数是否少于k。 /* * 求链表的倒数第k个...
  • u013238950
  • u013238950
  • 2016-03-06 12:29:12
  • 1068

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

设置两个指针,相差k个节点。//如何找出单链表中的倒数第k个元素 public class findelem { public static Node method(Node head,int k)...
  • sinat_33057149
  • sinat_33057149
  • 2017-10-06 23:13:11
  • 286

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

如何找出单链表中的倒数第k个元素
  • jsqfengbao
  • jsqfengbao
  • 2015-04-04 20:39:31
  • 3685

单向链表_找出倒数第K个节点

实现一个算法,找出单向链表中倒数第K个结点。
  • z597372259
  • z597372259
  • 2014-10-23 20:48:05
  • 2432

[算法]找出单链表中的倒数第k个元素

找出单链表中的倒数第k个元素解题思路: 为了求出链表中的倒数第k个元素,最容易想到的方法是首先遍历一遍单链表,求出整个单链表的长度n,然后将倒数第k个,转换为正数第n-k个,接下去遍历一次就可以得...
  • CodeEmperor
  • CodeEmperor
  • 2016-05-06 16:12:23
  • 4134

输出单链表中倒数第k个结点(Java版)

题目:输入带头结点的单链表L,输出该单链表中倒数第k个结点。单链表的倒数第0个结点为该单链表的尾指针。要求只能遍历一次单链表。 解题思路: 如果不要求只能遍历一次单链表,我们可以先...
  • lavor_zl
  • lavor_zl
  • 2015-01-17 15:40:24
  • 1693

13、输入一个单向链表,输出该链表中倒数第k个结点

题目: 输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。 方法一: 假设整个链表有n个结点,那么倒数第k个结点是从头结点开始的第n-k-1个结点(从0开...
  • zwb8848happy
  • zwb8848happy
  • 2012-03-07 22:42:20
  • 3519

查找单链表中倒数第m个元素

相对于双向链表来说,单向链表只能从头到尾依次访问链表的各个节点,所以如果要找链表的倒数第m个元素也只能从头到尾进行查找,在查找的过程中,设定两个指针,其中current指针指向当前访问的节点,prev...
  • chengfangang
  • chengfangang
  • 2013-08-07 13:03:40
  • 1238

输入一个单向链表,输出该链表中倒数第K个结点

输入一个单向链表,输出该链表中倒数第K
  • yincheng01
  • yincheng01
  • 2014-09-14 22:34:55
  • 1440

查找一个单向链表中倒数第K个元素

查找一个单向链表中倒数第K个元素
  • StoryMonster
  • StoryMonster
  • 2016-10-05 16:09:59
  • 551
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 902
    排名: 5万+
    最新评论