您的位置:首页 > 其它

【练习】输入一个单向链表,输出该链表中倒数第k 个结点

2011-11-02 10:57 357 查看
/************************************************************************/
/* 题目:输入一个单向链表,输出该链表中倒数第k 个结点。链表的倒数第0 个结点为链表的
尾指针。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};

解题思路参考http://www.diybl.com/course/3_program/c++/cppjs/20110510/555111.html*/
/************************************************************************/

#include <iostream>
using namespace std;

struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};

void Link(ListNode* &pHead,int n)
{
if (pHead==NULL)
{
pHead=new ListNode;
pHead->m_nKey=n;
pHead->m_pNext=NULL;
}
else
{
ListNode* current=new ListNode;
current->m_nKey=n;
current->m_pNext=pHead;
pHead=current;
}
}

ListNode* Find_Kth_Element1(ListNode* pHead, int k)
{
ListNode * pResult=pHead;
int length=1;

while (pHead->m_pNext!=NULL)
{

pHead=pHead->m_pNext;
length++;
}
if (length<k)
{
return NULL;
}
for (int n=0;n<length-k;n++)
{
pResult=pResult->m_pNext;
}
return pResult;

}
ListNode* Find_Kth_Element2(ListNode* pHead, int k)
{
ListNode * pResult=pHead;
ListNode*pAhead=pHead;
for (int i=0;i<k;i++)
{
if (pAhead!=NULL)
{
pAhead=pAhead->m_pNext;
}
else
{
return NULL;
}

}

while (pAhead!=NULL)
{
pAhead=pAhead->m_pNext;
pResult=pResult->m_pNext;
}
return pResult;
}

int main()
{
ListNode *pHead=NULL;
Link(pHead,2);
Link(pHead,3);
Link(pHead,6);
Link(pHead,4);
Link(pHead,9);
Link(pHead,7);
//ListNode *result=Find_Kth_Element1(pHead,6);
ListNode *result=Find_Kth_Element2(pHead,1);
if (result)
{
cout<<result->m_nKey;
}
else
{
cout<<"error"<<endl;
}

}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐