描述

输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针。

链表结点定义如下:

struct ListNode

{

int       m_nKey;

ListNode* m_pNext;

};

详细描述:

接口说明

原型:

ListNode* FindKthToTail(ListNode* pListHead, unsignedint k);

输入参数:

ListNode* pListHead  单向链表

unsigned int k  倒数第k个结点

输出参数(指针指向的内存区域保证有效):

返回值:

正常返回倒数第k个结点指针,异常返回空指针

知识点 链表,查找,指针
运行时间限制 10M
内存限制 128
输入

输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值

输出

输出一个整数

样例输入 8 1 2 3 4 5 6 7 8 4
样例输出 4

package com.oj;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner; class Node{
private int data;
private Node next;
private Node pre;
public Node() {
this.next = null;
this.pre = null;
}
public Node(int data) {
this.data = data;
this.next = null;
this.pre = null;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Node getPre() {
return pre;
}
public void setPre(Node pre) {
this.pre = pre;
}
} class MineList{
private Node head;
private Node rear;
public MineList() {
head = null;
rear = null;
}
public void insertNode(Node node){
if(head==null){
head = node;
rear = node;
}else{
rear.setNext(node);
node.setPre(rear);
rear = node;
}
}
public int getKfromRear(int k){
if(rear!=null){
Node show = rear;
for(int i = 0;i < k;i++){
show = show.getPre();
//System.out.println("hello "+i);
}
return show.getData();
}
return 0;
}
}
public class Test {
public static void test(){
Scanner in = new Scanner(System.in);
String str = in.nextLine();
String[] strdata = str.split(" ");
int length = strdata.length;
int num = Integer.valueOf(strdata[0]);
int k = Integer.valueOf(strdata[length-1]);
int[] data = new int[length-2]; MineList list = new MineList();
for(int i = 1;i <= length-2; i++){
data[i-1] = Integer.valueOf(strdata[i]);
list.insertNode(new Node(data[i-1]));
}
System.out.println(list.getKfromRear(k));
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
int[] data = new int[num];
for(int i = 0;i < num; i++)
data[i] = in.nextInt();
int k = in.nextInt();
MineList list = new MineList();
for(int i = 0;i < num; i++){
list.insertNode(new Node(data[i]));
}
System.out.println(list.getKfromRear(k));
}
}

  

题目描述

输入一个链表,输出该链表中倒数第k个结点。
思路:设置两个指针,一个findlast指针,用于查找最后的null;一个findk指针,始终位于 findlast的前k的位置。
/*
public class ListNode {
int val;
ListNode next = null; ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null)
return null;
ListNode findlast = head;
ListNode findk = head; while(findlast!=null){
findlast = findlast.next;
if(k==0)
findk = findk.next;
if(k!=0)
k--;
}
if(k==0)
return findk;
return null;
}
}

  

输出单向链表中倒数第k个结点的更多相关文章

  1. [华为]输出单向链表中倒数第k个结点

    输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int       m_nKey; ListNode* m_ ...

  2. 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点

    第 13 题(链表):题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针.链表结点定义如下: struct ListNode {int m_nKey;Lis ...

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

    输入一个单向链表,输出该链表中倒数第K个结点,具体实现如下: #include <iostream> using namespace std; struct LinkNode { publ ...

  4. 输出单项链表中倒数第k个结点——牛客刷题

    题目描述: 输入一个单向链表,输出该链表中倒数第k个结点 输入.输出描述: 输入说明:1.链表结点个数 2.链表结点的值3.输入k的值 输出说明:第k个结点指针 题目分析: 假设链表长度为n,倒数第k ...

  5. 算法:输入一个链表,输出该链表中倒数第k个结点。

    算法:输入一个链表,输出该链表中倒数第k个结点.<剑指offer> 思路加到注释里面了: 1:两个if判断是否返回值为空,首个为空,没有第k个值: 2:for循环找到倒数第k个值,返回为a ...

  6. 【剑指offer】输入一个链表,输出该链表中倒数第k个结点。

    一.题目: 输入一个链表,输出该链表中倒数第k个结点. 二.思路: 用两个指针p1和p2,p2先跑k步,然后p1和p2同时跑,p2跑到头p1所在的位置就是倒数第k个节点.很简单吧?简单你也想不到,想到 ...

  7. 剑指offer14:输入一个链表,输出该链表中倒数第k个结点。

    1. 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2. 思路和方法 可以用两个指针,一个指针遍历到第k个结点的时候,第二个指针再走到第一个节点,然后两个指针的距离始终保持k-1.这样,当第一 ...

  8. 剑指Offer-14:输入一个链表,输出该链表中倒数第k个结点。

    题目描述: 输入一个链表,输出该链表中倒数第k个结点.例如有一个链表有六个节点1,2,3,4,5,6.则它的倒数第二个节点为5 节点定义如下: public class ListNode { int ...

  9. 输入一个链表,输出该链表中倒数第k个结点。

    // test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

随机推荐

  1. HTTP 请求方式: GET和POST的比较(转)

    GET和POST是HTTP的两个常用方法.   什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议 ...

  2. 并查集 + 线段树 LA 4730 Kingdom

    题目传送门 题意:训练指南P248 分析:第一个操作可以用并查集实现,保存某集合的最小高度和最大高度以及城市个数.运用线段树成端更新来统计一个区间高度的个数,此时高度需要离散化.这题两种数据结构一起使 ...

  3. git 学习笔记3--status flow

    1.status 通过执行 git status 命令,查看输出的信息来理解文件所处的状态以及可能的动作. 1.1 nothing to commit (working directory clean ...

  4. linux内存分配

    在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序.或是读取刚存取过 ...

  5. soapui中文操作手册(五)----入门与安全测试

    在SoapUI4.0引入的安全测试特点使它非常容易为你来验证你的目标服务的功能性安全,就可以评估您的系统常见的安全攻击的漏洞.特别是如果系统是公开可用的,即使不是这种情况,确保了完全安全的环境也是非常 ...

  6. python 代码片段19

    #coding=utf-8 # 函数 def foo(x): print x foo(123) # import httplib def check_web_server(host,port,path ...

  7. 如何终止java线程

    http://blog.csdn.net/anhuidelinger/article/details/11746365 终止线程的三种方法 有三种方法可以使终止线程. 1.  使用退出标志,使线程正常 ...

  8. Codeforces Round #353 (Div. 2)Restoring Painting

    Vasya works as a watchman in the gallery. Unfortunately, one of the most expensive paintings was sto ...

  9. Android 定位地理坐标体系

    参考: 中国特色 火星坐标 iOS 火星坐标相关整理及解决方案汇总 百度地图坐标转换API 地球坐标系 (WGS-84) 到火星坐标系 (GCJ-02)百度坐标系 (BD-09) 的转换算法 火星坐标 ...

  10. Bootstrap做的HTML页面在本地IE打开正常,放到服务器上显示就不正常了

    <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Com ...