终于到这道题了,这是俺们那年考研数据结构最后一道题!
思路:设置相距为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;
}
结论:还有找到中间节点的思路,也设置两个指针,一个指针每次++,另一个指针进行两次++!!!