针对带附加头节点的单链表,试编写下列函数。
- 定位函数Locate:在单链表中寻找第i个结点。若找到,则函数返回第i个结点的地址;若找不到,则函数返回NULL。
- 求最大值函数max:通过一趟遍历在单链表中确定值最大的结点。
- 统计函数number:统计单链z表中具有给定值x的所有元素。
- 建立create:根据一维数组a[ n]建立一个单链表,使单链表中各元素的次序与a[ n]中各元素的次序相同,要求该程序的时间复杂性为O(n)。
- 整理函数tidyup:在非递减有序的单链表中删除值相同的多余结点。
#include<iostream>
using namespace std;
template<class T>
struct LinkNode {
T data;
LinkNode<T>* link;
LinkNode(LinkNode<T>* ptr = NULL) { link = ptr;}
LinkNode(const T& item, LinkNode<T>* ptr = NULL) { data = item; link = ptr; }
};
template<class T>
class List {
private:
LinkNode<T>* first;
public:
List() { first = new LinkNode<T>; }
List(const T& x) { first = new LinkNode<T> (x); }
~List() { }
void inputRear(T endTag);
void output();
LinkN