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 list = new ArrayList();
            // 头插法倒序构建链表
            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;
    }
}

题目来源:牛客网