这个搞链表的方式真无聊。。。 我特么先用个vector读进来,转成个链表,再去找链表。。。 都vector了,直接找节点就好了。。 不过为了秀一把递归和链表操作,还是老老实实写了。。。

话说这种返回空指针,给个0是什么鬼。

正式考试也这样么。


#include <iostream>
#include <vector>
using namespace std;
struct ListNode

{

int       m_nKey;

ListNode* m_pNext;
ListNode() : m_nKey(0), m_pNext(nullptr) {}
ListNode(int x) : m_nKey(x), m_pNext(nullptr) {}
ListNode(int x, ListNode *next) : m_nKey(x), m_pNext(next) {}

};
ListNode  *res;
ListNode *find(ListNode * l, int pos,int & size)
{
    if(l->m_pNext==nullptr)
    {
        size=1;
        if(size==pos)
            res=l;
        return l;
    }
   // size=size+1;
    find(l->m_pNext,pos,size);
     size++;
    if(size ==pos)
    res=l;
   
    return l;
        
    
}
int main(){
    int N;
    vector<int> vec;
    while(cin>>N)
    {
        for(int i =0;i<N;i++){
            int q;
            cin>>q;
            vec.push_back(q);
        }
        int pos =0;
        cin>>pos;
        ListNode  *l=new ListNode();
        l->m_nKey=vec[0];
        l->m_pNext=nullptr;
        ListNode *p=l;
        for(int i =1;i<vec.size();i++){
            
            ListNode *ll=new ListNode();
            ll->m_nKey=vec[i];
            p->m_pNext=ll;
            p=ll;
            
            
        }
        int size =0;
        find(l,pos,size);
        if(res)
        cout<<res->m_nKey<<endl;
        else
            cout<<0<<endl;
        
    }
    return 0;
}