现在的位置: 首页 > 综合 > 正文

第十四题 输出链表的倒数第k个节点的值

2018年04月13日 ⁄ 综合 ⁄ 共 851字 ⁄ 字号 评论关闭

题目:输入一个单向链表,输出该链表中倒数第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;
}

抱歉!评论已关闭.