题目:输入一个单向链表,输出该链表中倒数第k个结点。链表结点定义如下:
struct node
{
int value;
node *m_next;
};
思想:两个指针,开始时同时指向头节点,然后一个指针向后移K位后,两个指针同时向后移,知道后面一个指针为尾指针是停止,这时第一个指针指的位置即为倒数第k个节点。
//输出链表的倒数第K个节点
#include <iostream>
using namespace std;
struct node
{
int value;
node *m_next;
};
void makenode(node *&ptr, int value)
{
if (ptr==nullptr)
{
node *current=new node();
current->value=value;
current->m_next=nullptr;
ptr=current;
}
else
{
makenode(ptr->m_next,value);
}
}
void Findkthnode(node *ptr,int k)
{
if (ptr==nullptr)
{
return;
}
node *beg=ptr;
node *end=ptr;
for (int i=1;i<k;++i)
{
if (end->m_next!=nullptr)
{
end=end->m_next;
}
else
{
return;
}
}
while (end->m_next!=nullptr)
{
end=end->m_next;
beg=beg->m_next;
}
cout<<beg->value<<endl;
}
int main()
{
node *root = nullptr;
makenode(root,1);
makenode(root,2);
makenode(root,3);
makenode(root,4);
makenode(root,5);
makenode(root,6);
makenode(root,7);
makenode(root,8);
makenode(root,9);
Findkthnode(root,4);
return 0;
}