template <class T> class mylist{ public: // 这是一个链表的节点 struct Link{ T val; Link* next; } 增 :insert(T val) 在链表中创建新节点,节点上保存的数据为 val 删:remove(T val) 移除链表中数据为 val 的节点 改: operator[](int index) 将第index的节点修改 排序:sort 遍历:show 输出链表中所有节点上 val private: Link * head; // 记录链表的头节点的指针 Link* tail; // 记录链表的为节点的指针
代码演示:
#include <iostream>
// 增:insert(T val) 在链表中创建新节点,节点上保存的数据为 val
// 删:remove(T val) 移除链表中数据为 val 的节点
// 改: operator[](int index) 将第index的节点修改
// 排序:sort
// 遍历:show 输出链表中所有节点上 val
using namespace std;
template <class T>
class Mylist
{
public:
//定义单链表节点结构体
struct Link
{
T val;//节点的值
Link *next;//指向下一个节点的指针
Link *prev;//指向前一个的指针
};
// 这是一个链表的节点
//构造函数,初始化单链表的头节点
Mylist():head(new Link),tail(new Link)
{
head->val = 0;
tail->val = 0;
head->next = tail;
tail->next = NULL;
tail->prev = head;
head->prev = NULL;
}
//插入函数,在链表尾部插入新节点
void insert(const T val)
{
Link *Q = new Link;//创建新节点
Q->val = val;//设置新节点的值
Link *P = tail->prev;
P->next = Q;
Q->prev = P;
Q->next = tail;
tail->prev = Q;
}
//删除函数,移除链表中的值为val的节点
void remove(const T val)
{
Link *H = head->next;
while (H->next != NULL)
{
if(H->val == val)
{
Link *temp = H;
Link *P = temp->prev;
Link *N = temp->next;
P->next = N;
N->prev = P;
delete temp;
break;
}
H = H->next;
}
}
//重载下标运算符,用于访问链表中的节点
T &operator[](int index)
{
Link *H = head;
for(int i = 0;i<index;i++)
{
H = H->next;
}
return H->val;
}
//重载左移运算符,用于链表插入
Mylist &operator<<(const T val)
{
insert(val);
return *this;
}
//排序函数,对链表进行排序
void sort()
{
Link *current = head->next;
while(current->next != NULL)
{
Link *temp = current->next;
while (temp->next != NULL)
{
if(current->val < temp->val)
{
T tnum = current->val;
current->val = temp->val;
temp->val = tnum;
}
temp = temp->next;
}
current = current->next;
}
}
//遍历
void show()
{
Link *H = head->next;
while(H->next != NULL)
{
cout << H->val << " ";
H = H->next;
}
cout << endl;
}
private:
Link *head; // 记录链表的头节点的指针
Link *tail; // 记录链表的为节点的指针
};
int main()
{
Mylist<int> s1;
s1 << 10 << 2 << 9 << 28 << 1 << 99;
s1.sort();
s1.show();
s1[3]=100;
s1.show();
s1.remove(100);
s1.show();
return 0;
}
效果展示: