第13题:
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
思路:我用的最笨的办法,先统计长度,在遍历去找,O(2n)
#include<cstdio>
#include<iostream>
using namespace std;
struct ListNode{
int m_nKey;
ListNode* m_pNext;
};
void addNode(ListNode *&mList,int value){
if(mList==NULL){
ListNode *_list=new ListNode();
if(_list==NULL) {cout<<"内存错误"<<endl;return;}
_list->m_nKey=value;
_list->m_pNext=NULL;
mList=_list;
}else addNode(mList->m_pNext,value);
}
ListNode* fun_k(ListNode *mList,int k){
int len=0;
ListNode *p=mList;
while(p!=NULL){
len++;
p=p->m_pNext;
}
if(k>len) return NULL;
p=mList;
for(int i=0;i<len-k;i++)
p=p->m_pNext;
return p;
}
int main(){
ListNode *head=NULL;
addNode(head,1);
addNode(head,2);
addNode(head,3);
addNode(head,4);
addNode(head,5);
addNode(head,6);
addNode(head,7);
ListNode *p=new ListNode();
int k=3;
p=fun_k(head,k);
cout<<"list 的倒数第K个结点是:"<<p->m_nKey<<endl;
return 0;
}