输出单向链表中倒数第k个结点
| 描述 |
输入一个单向链表,输出该链表中倒数第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 |
| 输入 |
输入说明 |
| 输出 |
输出一个整数 |
| 样例输入 | 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));
}
}
题目描述
/*
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个结点的更多相关文章
- [华为]输出单向链表中倒数第k个结点
输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_ ...
- 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点
第 13 题(链表):题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针.链表结点定义如下: struct ListNode {int m_nKey;Lis ...
- 输入一个单向链表,输出该链表中倒数第K个结点
输入一个单向链表,输出该链表中倒数第K个结点,具体实现如下: #include <iostream> using namespace std; struct LinkNode { publ ...
- 输出单项链表中倒数第k个结点——牛客刷题
题目描述: 输入一个单向链表,输出该链表中倒数第k个结点 输入.输出描述: 输入说明:1.链表结点个数 2.链表结点的值3.输入k的值 输出说明:第k个结点指针 题目分析: 假设链表长度为n,倒数第k ...
- 算法:输入一个链表,输出该链表中倒数第k个结点。
算法:输入一个链表,输出该链表中倒数第k个结点.<剑指offer> 思路加到注释里面了: 1:两个if判断是否返回值为空,首个为空,没有第k个值: 2:for循环找到倒数第k个值,返回为a ...
- 【剑指offer】输入一个链表,输出该链表中倒数第k个结点。
一.题目: 输入一个链表,输出该链表中倒数第k个结点. 二.思路: 用两个指针p1和p2,p2先跑k步,然后p1和p2同时跑,p2跑到头p1所在的位置就是倒数第k个节点.很简单吧?简单你也想不到,想到 ...
- 剑指offer14:输入一个链表,输出该链表中倒数第k个结点。
1. 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2. 思路和方法 可以用两个指针,一个指针遍历到第k个结点的时候,第二个指针再走到第一个节点,然后两个指针的距离始终保持k-1.这样,当第一 ...
- 剑指Offer-14:输入一个链表,输出该链表中倒数第k个结点。
题目描述: 输入一个链表,输出该链表中倒数第k个结点.例如有一个链表有六个节点1,2,3,4,5,6.则它的倒数第二个节点为5 节点定义如下: public class ListNode { int ...
- 输入一个链表,输出该链表中倒数第k个结点。
// test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
随机推荐
- HDU 4513 吉哥系列故事——完美队形II (Manacher变形)
题意:假设有n个人按顺序的身高分别是h[1], h[2] ... h[n],从中挑出一些人形成一个新的队形,新的队形若满足以下要求,则就是新的完美队形: 1.连续的 2.形成回文串 3.从左到中间那 ...
- 分布式缓存技术memcached学习(一)——linux环境下编译memcahed
安装依赖工具 [root@localhost upload]# yum install gcc make cmake autoconf libtool 下载并上传文件 memcached 依 ...
- server返回arraylist时,juqery在客户端的处理
首先,要添加命名控件如下: using System.Web.Services; server端的方法 [WebMethod()] public static ArrayList GetAuthB ...
- 卸载Photoshop
安装Photoshop后出现卸载不干净的问题,从而导致安装另一个photoshop版本时出现错误,一般情况下我们都是在控制面板的卸载程序里进行卸载的,但往往这样的卸载并不能清除注册表残留以及系统盘里的 ...
- OA
OA(政府) http://zw.wuzhitong.com/oa_wuzhitong/index.asp http://www.wuzhitong.com/Information_ZW.html O ...
- datatables笔记
刷新 http://datatables.net/reference/api/ajax.reload()
- BZOJ4116 : [Wf2015]Tours
将边集划分成若干极大不相交集合,满足每个简单环都可以由某些集合相加得到,则答案就是这些集合大小的$\gcd$的约数. 对于一个简单环,上面的边一定不是桥边,而和它在一个集合的边肯定不在其他简单环上.因 ...
- ACM: hdu 1811 Rank of Tetris - 拓扑排序-并查集-离线
hdu 1811 Rank of Tetris Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & % ...
- BZOJ 1012 题解
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8468 Solved: 3702[Submi ...
- uboot中添加FIQ中断及相关问题
本文主要说明了在uboot中添加FIQ中断时遇到的问题以及对应的解决办法. 首先交代一下项目的软硬件环境.硬件方面,使用s3c2440作为主控芯片,外接串口.网卡等设备.软件方面,主控芯片上电后运行u ...