链表的基本操作(自学笔记)

链表的基本操作

用模板类实现。

#include<iostream>
#include<list>
using namespace std;
template<class T> class List;

template<class T>
class ListNode{
    friend class List<T>;
    private:
    ListNode *link;
    T data;
    ListNode(T);
};
template<class T>
ListNode<T>::ListNode(T element){
    data=element;
    link=0;
}
template<class T>
class List{
    friend class ListIterator;
    public:
    List(){first=0;};
    void Insert(T);
    void Delete(T);
    void Invert();
    void show();
    void Concatentate(List<T>);
    private:
    ListNode<T> *first;
};
template<class T>
void List<T>::Insert(T k){
    ListNode<T> *newnode=new ListNode<T> (k);
    newnode->link=first;
    first=newnode;
}
template<class T>
void List<T>::Delete(T k){
ListNode<T> *previous=0;
ListNode<T> *current;
for(current=first;
current&&current->data!=k;
previous=current,current=current->link){;}
    if(current){
        if(previous)previous->link=current->link;
        else first=first->link;
        delete current;
    }
}
template<class T>
void List<T>::Invert(){
    ListNode<T> *p=first,*q=0;
    while(p)
    {
        ListNode<T> *r=q;q=p;
        p=p->link;
        q->link=r;
    }
    first=q;
}
template<class T>
void List<T>::show(){
for(ListNode<T> *current=first;current;current= current->link){
    std::cout<<current->data;
    if(current->link) std::cout<<"->";
}
std::cout<<std::endl;
}
template<class T>
void List<T>::Concatentate(List<T> b)
{
	if (!first){first = b.first; return;}
	if (b.first)
    {
			ListNode<T> *p;
			for (p = first; p->link; p = p->link) ;//空循环
			p->link = b.first;
	}
}

int main(){
    list <char> charlist;
    charlist.push_front('b');
    charlist.push_front('a');
    charlist.push_front('d');
    charlist.push_front('c');
    std::list<char>::iterator i = charlist.begin();
	std::cout << *i <<"->";
	while (i != charlist.end())
	{
		cout << *i << "->";
		++i;
	}
    cout<<"STL库迭代器";
	cout << endl;
   
    return 0;
    List <int> intlist;
    intlist.Insert(5);
    intlist.Insert(15);
    intlist.Insert(25);
    intlist.show();
    intlist.Invert();
    intlist.Delete(5);
    intlist.show();
    return 0; 
}

猜你喜欢

转载自blog.csdn.net/qq_45347584/article/details/104124052