题解 | #输出单向链表中倒数第k个结点#
输出单向链表中倒数第k个结点
https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
typedef struct ListNode {
int m_nKey;
ListNode* n_pNext;
}*LinkNode;
LinkNode creatList(int num,vector<int> value)
{
LinkNode Head = new ListNode;
Head->m_nKey=value[0];
Head->n_pNext=NULL;
LinkNode p = Head;
for(int i=1 ; i<num ; i++){
LinkNode node = new ListNode;
node->m_nKey=value[i];
node->n_pNext=NULL;
p->n_pNext = node ;
p = node;
}
return Head;
}
int main()
{
LinkNode H;
int num;
int k;
vector<int>value;
int i=0;
while(cin>>num){
value.resize(num);
for(int i = 0; i<num ; i++){
cin>>value[i];
}
cin >> k ;
H = creatList(num,value);
stack<int> mystack;
LinkNode p = H;
while(p!=NULL){
mystack.push(p->m_nKey);
p = p->n_pNext;
}
for(int i=0 ; i<(k-1); i++){
mystack.pop();
}
cout<<mystack.top()<<endl;
}
return 0;
}
看了下主要有两种解法,一种是双指针(这确实是个好思路),还有一个是使用递归。
我通过先建了一个stack容器,把正序链表依次入栈,然后出栈对应的个数,本质思想和递归也是一样的。但不知道有没有违背题目的本意,因为我使用了stack容器


