【华为OJ】【035-输出单向链表中倒数第k个结点】
2016-05-09 06:22
465 查看
【华为OJ】【算法总篇章】
【华为OJ】【035-输出单向链表中倒数第k个结点】
【工程下载】
题目描述
输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针。
输入描述
输入说明 1 输入链表结点个数 2 输入链表的值 3 输入k的值
输出描述
输出一个整数
输入例子
8 1 2 3 4 5 6 7 8 4
输出例子
4
算法实现
import org.omg.SendingContext.RunTime; import java.util.List; import java.util.Scanner; /** * Author: 王俊超 * Date: 2015-12-24 16:10 * All Rights Reserved !!! */ public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt")); while (scanner.hasNext()) { int n = scanner.nextInt(); ListNode head = new ListNode(0); ListNode prev = head; while ((--n) >= 0) { prev.next = new ListNode(scanner.nextInt()); prev = prev.next; } int k = scanner.nextInt(); System.out.println(findKthToTail(head, k)); } scanner.close(); } /** * 找倒数第k个结点,假设k是有效的 * * @param head * @param k * @return */ private static ListNode findKthToTail(ListNode head, int k) { ListNode prev = head; while (--k >= 0 && prev != null) { prev = prev.next; } // 说明k已经超出了链表的长度 if (prev == null) { throw new RuntimeException("k=" + k + "不合法"); } // 注释掉的才是正确答案 // while (prev != null) { // prev = prev.next; // head = head.next; // } // 如果从0开始,即链表尾部第一个是倒数第0个那么下面是正确的 while (prev.next != null) { prev = prev.next; head = head.next; } return head; } private static class ListNode { int v; ListNode next; ListNode(int v) { this.v = v; } @Override public String toString() { return "" + v; } } }
相关文章推荐
- 【华为OJ】【034-找出字符串中第一个只出现一次的字符】
- Start Instance 操作详解 - 每天5分钟玩转 OpenStack(31)
- 【Unity】12.5 Navmesh Obstacle组件
- Start Instance 操作详解 - 每天5分钟玩转 OpenStack(31)
- 【Unity】12.4 通过网格分层选择行进路线
- 【华为OJ】【033-名字的漂亮度】
- Start Instance 操作详解 - 每天5分钟玩转 OpenStack(31)
- 【Unity】12.3 Off Mesh Link组件
- 【华为OJ】【032-输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数】
- 【Unity】12.2 导航网格寻路简单示例
- Linux挂载命令mount用法及参数详解
- 盘点7款应用最广泛的 Linux 桌面环境
- 【华为OJ】【031-求小球落地5次后所经历的路程和第5次反弹的高度】
- 【Unity】12.1 基本概念
- 【Unity】第12章 导航网格和寻路
- jquery导航栏
- ubuntu 安装jdk tomcat 和mysql
- LeetCode 117. Populating Next Right Pointers in Each Node II
- LeetCode 57. Insert Interval
- Android笔记之Content Provider(内容提供器)