取链表的 倒数第 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;
}