输出单向链表中倒数第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< ...
随机推荐
- 网上下载的CHM帮助文件打不开的解决办法。
我的机器 装的是 Windows server 2008 操作系统.他的安全性比较高. 我在网上下载了一个 CHM 帮助文档.结果打不开. 现象: 打开时 ,提示 安全警告, 提示:来自Interne ...
- python 继承
继承一个类 如果已经定义了Person类,需要定义新的Student和Teacher类时,可以直接从Person类继承: class Person(object): def __init__(self ...
- Liferay 6.2 改造系列之十二:修改Portal设置页面表单内容
将Portal设置页面中无用的内容删除: 在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Input a list of ...
- JS Number对象
数字属性 MAX_VALUE MIN_VALUE NEGATIVE_INFINITY POSITIVE_INFINITY NaN prototype constructor 数字方法 toExpone ...
- JavaScript 入门 (1)
一. javascript的调用 JavaScript代码可以直接嵌在网页的任何地方,不过通常我们都把JavaScript代码放到<head>中: <html> <hea ...
- Android集成支付宝的坑
Android在集成支付宝sdk的时候, 如果有安装支付宝,则启动支付宝app进行支付: 如果没有安装,则启动 H5PayActivity 进行支付. 记得在AndroidManifest里面配置: ...
- BZOJ 3542 [Poi2014]Couriers ——可持久化线段树
[题目分析] 查找区间内出现次数大于一半的数字. 直接用主席树,线段树上维护区间大小,由于要求出现次数大于一半,每到一个节点可以分治下去. 时间复杂度(N+Q)logN [代码] #include & ...
- 转载:python发送HTTP请求
1. [代码]GET 方法 import httplib #----------------------------- conn = httplib.HTTPConnection("www. ...
- PL/SQL 循环结构
(1)LOOP...EXIT...END语句示例: control_var:; LOOP then EXIT; END IF; control_var:; END LOOP; 上述,初始化contro ...
- ACM 交换输出
交换输出 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数.(如果这个第一个数就是最 ...