找到单链表的后数第k个节点

看到一个面试题,简单的,才下手做的。返回单链表的第k个节点(给出了尾指针),跟那个步长分别为一为二找到中间和最后的那个差不多。

就是定义两个指针,都指向head,然后一个向后移动k步,再同时移动,到达尾巴即可。

代码如下,望不吝赐教!

#include <iostream>

using namespace std;

typedef int ElemType;

class linkList
{
public:
	linkList();
	inline void insert(ElemType elem);
	void print() const;
	const ElemType& get_k(int k);
private:
	typedef struct Node
	{
		ElemType data;
		Node* next;
		Node(ElemType elem)
		{
			data = elem;
			next = NULL;
		}
	};
	Node* head;
	Node* tail;
};
linkList::linkList()
{
	head = NULL;
	tail = NULL;
}
void linkList::insert(ElemType elem)
{
	Node* pnew = new Node(elem);
	if(head)
	{
		pnew->next = head;
	}
	head = pnew;
}
const ElemType& linkList::get_k(int k)
{
	Node* p1 = head;
	Node* p2 = head;
	for(int i = 1; i < k; ++i)
	{
		if(p2->next == NULL)
			{
				cout << "Error! " << endl;
				return -1;
			}
		p2 = p2->next;
	}
	while(p2->next)
	{
		p1 = p1->next;
		p2 = p2->next;
	}
	return p1->data;
}
void linkList::print() const
{
	Node* p = head;
	while(p)
	{
		cout << p->data << "---->";
		p = p->next;
	}
	cout <<"\n\n";
}
int main(void)
{
	int k = 8;
	linkList list;
	list.insert(1);
	list.insert(2);
	list.insert(3);
	list.insert(4);
	list.insert(5);
	list.insert(6);
	list.insert(7);
	list.insert(8);
	list.print();
	cout << "the number of last but " << k << " is:";
	cout <<	list.get_k(k) << endl;

	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值