数据结构 算法题 取链表的 倒数第 n个元素的值。

 取链表的 倒数第 n个元素的值。


#include <iostream>
using namespace std;

template<typename T>
struct ListNode
{
	T m_nKey;//数据域
	ListNode* m_pNext;//指针域
	ListNode() :m_nKey(T()), m_pNext(NULL) {}
	ListNode(T value) :m_nKey(value), m_pNext(NULL) {}
};

template<typename T>
class List
{
public:
	List()
	{
		head = new ListNode<T>();
	}
	void Insert(T value)
	{
		ListNode<T>* s = new ListNode<T>(value);
		s->m_pNext = head->m_pNext;//头插节点.
		head->m_pNext = s;
	}
	ListNode<T>* Find(int k)//寻找目标节点.
	{
		ListNode<T>* p = head;
		ListNode<T>* q = head;
		for (int i = 0; i < k; i++)//让p指针先走一会儿(让子弹先飞一会儿).
		{
			p = p->m_pNext;
			if (p == NULL)
				return NULL;
		}
		while (p != NULL)//此刻q,p再同时走,知道p走到结尾,然后返回q就是结果.
		{
			q = q->m_pNext;
			p = p->m_pNext;
		}
		return q;
	}
	T Getvalue(ListNode<T>* t)//根据节点来获取值,测试用.
	{
		return t->m_nKey;
	}
private:
	ListNode<T>* head;
};

int main()
{
	List<int> list;
	int a[1000],i=0,m,n;

	cin >> n;
	int Item;
	while (cin >> Item)		a[i++] = Item;
	
	m = i;
	for(i=m-1;i>=0;i--)
		list.Insert(a[i]);	//所有插入点全是在从头位置,所以 13 45 54 32 1 4 98 2,要2先进 13最后进。

	cout << list.Getvalue(list.Find(n)) << endl;
	return 0;
}
文道_编程代写作业和辅导 2021-12-13 20:40:05
ListNode<int> *tmp = list.Find(n);
	if (tmp==NULL)
		cout << "Not Found" << endl;
	else
		cout << list.Getvalue(list.Find(n)) << endl;
	return 0;

文道_编程代写作业和辅导 2021-12-13 20:40:44
#include <iostream>
using namespace std;

template<typename T>
struct ListNode
{
	T m_nKey;//数据域
	ListNode* m_pNext;//指针域
	ListNode() :m_nKey(T()), m_pNext(NULL) {}
	ListNode(T value) :m_nKey(value), m_pNext(NULL) {}
};

template<typename T>
class List
{
public:
	List()
	{
		head = new ListNode<T>();
	}
	void Insert(T value)
	{
		ListNode<T>* s = new ListNode<T>(value);
		s->m_pNext = head->m_pNext;//头插节点.
		head->m_pNext = s;
	}
	ListNode<T>* Find(int k)//寻找目标节点.
	{
		ListNode<T>* p = head;
		ListNode<T>* q = head;
		for (int i = 0; i < k; i++)//让p指针先走一会儿(让子弹先飞一会儿).
		{
			p = p->m_pNext;
			if (p == NULL)
				return NULL;
		}
		while (p != NULL)//此刻q,p再同时走,知道p走到结尾,然后返回q就是结果.
		{
			q = q->m_pNext;
			p = p->m_pNext;
		}
		return q;
	}
	T Getvalue(ListNode<T>* t)//根据节点来获取值,测试用.
	{
		return t->m_nKey;
	}
private:
	ListNode<T>* head;
};

int main()
{
	List<int> list;
	int a[1000],i=0,m,n;

	cin >> n;
	int Item;
	while (cin >> Item)		a[i++] = Item;
	
	m = i;
	for(i=m-1;i>=0;i--)
		list.Insert(a[i]);	//所有插入点全是在从头位置,所以 13 45 54 32 1 4 98 2,要2先进 13最后进。

	ListNode<int> *tmp = list.Find(n);
	if (tmp==NULL)
		cout << "Not Found" << endl;
	else
		cout << list.Getvalue(list.Find(n)) << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/laocooon/article/details/121896952