//https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d?tpId=37&tqId=21274&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title= #include <iostream> #include <malloc.h> using namespace std; typedef struct ListNode{ int m_nkey; ListNode* m_pNext; }Node, *LinkList; int InitList(LinkList &L){ LinkList tem = (LinkList)malloc(sizeof(Node)); //? malloc <malloc.h> if(!tem) exit(-2); //? exit() 使程序再main外停止 OVERFLOW tem->m_pNext = NULL; //?指向运算符 L = tem; return 1; //OK } void CreatList(LinkList &L, int n){ //? 为什么要加引用 // int n = 0; int temnum = 0; LinkList rear = NULL; // cin >> n; for(int i = n;i>0;i--){ LinkList tem = (LinkList)malloc(sizeof(Node)); cin >> temnum; tem->m_nkey = temnum; tem->m_pNext = tem; if(i==n){ rear = tem; L->m_pNext = tem; }else{ rear->m_pNext = tem; rear = tem; } } } LinkList getElem(LinkList L){ LinkList head = L; // LinkList rear = NULL; int k = 0; cin >> k; for(int i = k;i>0;i--){ L = L->m_pNext; if(L==L->m_pNext&&i>1) return NULL; } head = head->m_pNext; while(L!=L->m_pNext){ L = L->m_pNext; head = head->m_pNext; } return head; } void ClearList(LinkList &L){ LinkList p = NULL; LinkList q = NULL; p = L->m_pNext; while(p!=p->m_pNext){ q = p->m_pNext; free(p); p = q; } free(p); L->m_pNext = NULL; } int main(){ LinkList L, ans; int n = 0; while(cin >> n){ InitList(L); CreatList(L, n); if((ans=getElem(L))!=NULL) cout << ans->m_nkey << endl; ClearList(L); free(L); } }