本题的本质其实就是考察自己实现链表类及链表的各个功能函数。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

struct ListNode {
    int m_nKey;
    ListNode *m_pNext;
    ListNode *_dummyHead;  // 虚拟头节点
    
    ListNode(int x) : m_nKey(x), m_pNext(nullptr) { }
};

void createList(ListNode *list, vector<int> val) {
    list->_dummyHead = new ListNode(0);  // 创建虚拟头节点,指向链表的第一个节点
    list->_dummyHead = list;
    for (int i = 0; i < val.size(); i++) {
        ListNode *ptr = new ListNode(0);  // 创建一个临时链表存放中间值
        ptr->m_nKey = val[i];
        ptr->m_pNext = nullptr;
        list->m_pNext = ptr;     // 将临时链表与目标链表相连接
        list = list->m_pNext;
    }
}

int lengthList(ListNode *list) {
    int len = 0;
    ListNode *cur = list->_dummyHead;
    while (cur->m_pNext != nullptr) {
        len++;
        cur = cur->m_pNext;
    }
    return len;
}

int findElement(ListNode *list, int k) {
    ListNode *ptr = list;
    while (k > 0 && ptr->m_pNext) {
        ptr = ptr->m_pNext;
        k--;
    }
    if (k == 0 && ptr != nullptr) {
        return ptr->m_nKey;
    } else {
        return -1;
    }
}

int main(){
    int n = 0;
    while (cin >> n) {
        vector<int> val;
        for (int i = 0; i < n; i++) {
            int temp = 0;
            cin >> temp;
            val.push_back(temp);
        }
        int k = 0;
        cin >> k;
        ListNode *list = new ListNode( 0 );
        createList(list, val);
        int len = lengthList(list);
        int m = len - k + 1;
        int res = findElement(list, m);
        if (res == -1) cout << -1 << endl;
        else cout << res << endl;
    }
    return 0;
}