本题的本质其实就是考察自己实现链表类及链表的各个功能函数。
#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;
}

京公网安备 11010502036488号