• 华为机试练习题:HJ51 输出单向链表中倒数第k个结点


    1、Java代码(直接运行版)

    1. package listnodes;
    2. import java.util.Scanner;
    3. //Definition for singly-linked list.
    4. class ListNode {
    5. int val;
    6. ListNode next;
    7. ListNode() {}
    8. ListNode(int val) { this.val = val; }
    9. ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    10. }
    11. public class LinkedListTest {
    12. public static void main(String[] args) {
    13. int[] nums = new int[]{1, 2, 3, 4, 5, 6, 7, 8};
    14. //正序构建链表
    15. ListNode head = new ListNode(-1);
    16. ListNode temp = head;
    17. for (int i = 0; i < nums.length; i++) {
    18. ListNode node = new ListNode(nums[i]);
    19. temp.next = node;
    20. temp = temp.next;
    21. }
    22. head = head.next;//去掉虚拟头节点就是构建好的完整链表
    23. //构建链表后,忘记链表长度,重新遍历链表,找到倒数第k个节点
    24. int k = 4;
    25. ListNode pre = head;
    26. ListNode rear = head;
    27. int count = 1;
    28. while(rear.next != null && count < k){
    29. count++;
    30. rear = rear.next;
    31. }
    32. while(rear.next != null){
    33. rear = rear.next;
    34. pre = pre.next;
    35. }
    36. System.out.println(pre.val);//5
    37. }
    38. }

    2、Java代码(牛客提交版)

    1. import java.util.Scanner;
    2. class ListNode {
    3. int val;
    4. ListNode next;
    5. ListNode() {}
    6. ListNode(int val) {
    7. this.val = val;
    8. }
    9. ListNode(int val, ListNode next) {
    10. this.val = val;
    11. this.next = next;
    12. }
    13. }
    14. public class Main {
    15. public static void main(String[] args) {
    16. Scanner in = new Scanner(System.in);
    17. while (in.hasNextInt()) {
    18. int n = in.nextInt();
    19. //正序构建链表
    20. ListNode head = new ListNode(-1);
    21. ListNode temp = head;
    22. for (int i = 0; i < n; i++) {
    23. ListNode node = new ListNode(in.nextInt());
    24. temp.next = node;
    25. temp = temp.next;
    26. }
    27. head = head.next;//去掉虚拟头节点就是构建好的完整链表
    28. //构建链表后,忘记链表长度,重新遍历链表,找到倒数第k个节点
    29. int k = in.nextInt();
    30. ListNode pre = head;
    31. ListNode rear = head;
    32. int count = 1;
    33. while (rear.next != null && count < k) {
    34. count++;
    35. rear = rear.next;
    36. }
    37. while (rear.next != null) {
    38. rear = rear.next;
    39. pre = pre.next;
    40. }
    41. System.out.println(pre.val);
    42. }
    43. }
    44. }

    3、完整题目

    输出单向链表中倒数第k个结点_牛客题霸_牛客网

    描述

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

    链表结点定义如下:

    struct ListNode
    {
        int m_nKey;
        ListNode* m_pNext;
    };

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

    要求:

    (1)正序构建链表;

    (2)构建后要忘记链表长度。

    数据范围:链表长度满足 1≤n≤1000  ,  k≤n  ,链表中数据满足  0≤val≤10000 

    本题有多组样例输入。

    输入描述:

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

    输出描述:

    输出一个整数

    示例1

    输入:

    8
    1 2 3 4 5 6 7 8
    4
    

    输出:

    5
  • 相关阅读:
    第15章 秒杀商品隔离解决方案
    2024.2.25 -ElasticSearch 进阶
    SSTI注入利用姿势合集
    Tomcat HTTP协议与AJP协议
    python Clickhouse 分布式表介绍和创建、插入和查询数据,以及解决遇到的问题
    Java进阶 - 易错知识点整理(待更新)
    word快捷键、conda一些安装问题、坐标转换初阶
    基于ssm的大学生心理健康系统设计与实现
    网络地址转换技术NAT以及路由器LAN口与WAN口的数据交换
    如何使用群晖NAS中FTP服务开启与使用固定地址远程上传下载本地文件?
  • 原文地址:https://blog.csdn.net/m0_37738114/article/details/134287239