Java机试题:输出单向链表中倒数第k个结点(头插倒置构建链表)

描述

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

链表结点定义如下:

struct ListNode

{

int       m_nKey;

ListNode* m_pNext;

};

 
 
正常返回倒数第k个结点指针,异常返回空指针
 
数据范围:链表长度满足  ,  ,链表中数据满足 
 
本题有多组样例输入。

 

 

输入描述:

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

输出描述:

输出一个整数

复制代码
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

 class ListNode {
    public int val;
    public ListNode next;
}

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()) {
            int n = sc.nextInt();
            List<Integer> list = new ArrayList<Integer>();
            // 头插法倒序构建链表
            ListNode head = new ListNode();
            for (int i = 0; i < n; i++) {
                ListNode node = new ListNode();
                node.val = sc.nextInt();
                // 该节点插入到头节点后,倒序
                node.next = head.next;
                // 头节点指向该节点
                head.next = node;
            }
            int k = sc.nextInt();
            System.out.println(getListNode(head, k).val);
        }
    }
    
    // 因为已经倒序,所以直接遍历
    public static ListNode getListNode(ListNode head, int k) {
        ListNode node = head;
        int j = 0;
        while(node.next != null && j < k) {
            j++;
            node = node.next;
        }
        return node;
    }
}
复制代码

题目来源:牛客网

posted @   对月当歌  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示