主要解题思路为:
1、尾插法创建链表
2、利用两个指针p1、p2,让p1先移动到k的位置,然后在一起移动两个指针,当p1指向空的时候,p2指向的就是倒数第K个元素。
#include <iostream>
using namespace std;
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
ListNode() {};
};
void createList(ListNode* &list, int num) {
list = new ListNode;
cin >> list->m_nKey;
list->m_pNext = nullptr;
ListNode* r = list;
for (int i = 1; i < num; ++i){
ListNode *temp = new ListNode;
cin >> temp->m_nKey;
temp->m_pNext = r->m_pNext;
r->m_pNext = temp;
r = temp;
}
}
void print(ListNode* list, int ele) {
ListNode *p1, *p2;
if (list == nullptr || ele < 0) {
return;
}
p1 = list;
p2 = list;
while (ele--) {
if (p1 == nullptr) {
return;
}
p1 = p1->m_pNext;
}
while (p1) {
p1 = p1->m_pNext;
p2 = p2->m_pNext;
}
cout << p2->m_nKey << endl;
}
int main() {
int num;
while (cin >> num) {
ListNode* res = nullptr;
createList(res, num);
cin >> num;
print(res, num);
}
}