标签:个数 name namespace while 析构函数 class front 函数 node
#include <iostream>
using namespace std;
template<class T>
class List
{
struct Node
{
T data;
Node* next;
Node() {next=NULL;}
};
Node* head;
public:
List()
{
head = new Node;
}
List(List<T>& that)//拷贝构造
{
head = new Node;
Node* node = that.head->next;
while(node!=NULL)
{
push_back(node->data);
node=node->next;
}
}
List operator = (List<T>& that)//赋值构造
{
head = new Node;
List<T> list(that);
head = list.head;
}
void push_back(T data)//在list的末尾添加一个元素
{
Node* node = new Node;
node->data = data;
back()->next = node;
}
void pop_back()//删除最后一个元素
{
Node* node = head;
while(node->next->next!=NULL) node=node->next;
delete node->next;
node->next = NULL;
}
Node* front()//返回第一个元素
{
Node* node = head->next;
return node;
}
Node* back()//返回最后一个元素
{
Node* node = head;
while(node->next!=NULL) node=node->next;
return node;
}
bool empty()//判断list是否为空
{
return head->next==NULL;
}
void reserve()//反转链表
{
if(head->next==NULL||head->next->next==NULL)
return;
Node* prevNode = NULL;
Node* curNode = head->next;
while(curNode!=NULL)
{
Node* nextNode = curNode->next;
curNode->next = prevNode;
prevNode = curNode;
curNode = nextNode;
}
head->next = prevNode;
}
void remove(T val)//从list删除元素
{
Node* node = head->next;
while(node!=NULL)
{
if(node->next!=NULL && node->next->data == val)
{
Node* no = node->next;
node->next = node->next->next;
delete no;
}
else node = node->next;
}
}
void merge(List<T> list)//合并两个list
{
Node* node = list.head->next;
while(node!=NULL)
{
push_back(node->data);
node=node->next;
}
}
void clear()//删除所有元素
{
Node* node = head;
while(node!=NULL)
{
Node* temp = node;
node = node->next;
delete temp;
}
}
void swap(List<T>& list)//交换两个list
{
Node* node = list.head;
list.head = head;
head = node;
}
int size()//返回list中的元素个数
{
Node* node = head->next;
int count = 0;
while(node!=NULL)
{
count++;
node=node->next;
}
return count;
}
void sort()//给链表排序
{
int n = size();
T t[n];
Node* node = head->next;
for (int i = 0; i < n; ++i)
{
t[i] = node->data;
node = node->next;
}
for (int i = 0; i < n-1; ++i)
for (int j = i+1; j < n; ++j)
if(t[i]>t[j])
{
T a = t[i];
t[i] = t[j];
t[j] = a;
}
clear();
head = new Node;
for (int i = 0; i < n; ++i)
push_back(t[i]);
}
friend ostream& operator << (ostream& os,List& list)//重载输出<<运算符
{
Node* node=list.head->next;
while(node != NULL)
{
os << node->data << " ";
node = node->next;
}
return os;
}
~List()//析构函数
{
clear();
}
};
int main()
{
List<int> list;
List<int> li;
for(int i=0;i<10;i++)
list.push_back(i);
for (int i = 20; i > 10; --i)
li.push_back(i);
list.swap(li);
cout << list << endl;
cout << li << endl;
list.merge(li);
cout << list << endl;
list.sort();
list.reserve();
cout << list << endl;
}
标签:个数 name namespace while 析构函数 class front 函数 node
原文地址:https://www.cnblogs.com/yyb123/p/9497618.html