终于到这道题了,这是俺们那年考研数据结构最后一道题!
思路:设置相距为k的两个指针,当后一个指针指向NULL 时,前面的指针就指向了倒数第K个,程序如下:
#include <iostream>
using namespace std;
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
int main()
{
int count, k, num;
ListNode* Head = new ListNode();
ListNode* p = Head;
ListNode* q = NULL;
cin >> count;
//创建链表
for (int i = 0; i<count; i++)
{
cin >> num;
q = new ListNode();
q->m_nKey = num;
p->m_pNext = q;
p = p->m_pNext;
}
cin >> k;
p = q = Head->m_pNext;
for (int i = 0; i < k; i++)
{
q = q->m_pNext;
}
while (q->m_pNext != NULL)
{
p = p->m_pNext;
q = q->m_pNext;
}
cout << p->m_nKey<<endl;
return 0;
}结论:还有找到中间节点的思路,也设置两个指针,一个指针每次++,另一个指针进行两次++!!!
本文详细解读了考研数据结构的最后一题,通过设置相距为k的两个指针解决倒数第k个元素的问题。还介绍了另一种找到中间节点的方法,即设置两个指针,一个每次加一,另一个每次加二。文章提供了完整代码实现。
1847

被折叠的 条评论
为什么被折叠?



