单链表

Posted SteveDevin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表相关的知识,希望对你有一定的参考价值。

#include <iostream> 
using namespace std;

template <typename T>
class List
{
private:
    template <typename N> 
    struct Node
    {
        N data, *next;    
        Node() { data = 0; next = NULL; }
        Node(N x, N *n = NULL ): data(x), next(n) {}
    };
    
    Node<T> *Head;
    int last = 0; 

public:
    List() { Head = new Node<T>; }
    
    List(const T &x) 
    {
        Head = new Node<T>;
        Head->next = new Node<T>(x); 
        last++;
    }
    
    List(List<T> &L)
    {
        this->makeEmpty();
        for(Node *p = Head->next; p != NULL; p = p->next)
            this->Insert(i, new Node(p->data)); 
    }
    
    ~List() { makeEmpty(); }
    
    void makeEmpty(Node<T> *p = Head->next)
    {
        if(p->next != NULL) makeEmpty(p->next);
        delete p;
    } 
    
    int Length() const { return last; }
    
    Node<T>* getHead() const { return Head; }
    
    Node<T>* Search(T x)
    {
        for(Node<T> *p = Head->next; p!=NULL; p = p->next)
            if(p->data == x) return p;
        return NULL; 
    }
    
    Node<T>* Locate(int i)
    {
        for(Node<T> *p = Head->next, int r = 1; p != NULL; p = p->next, r++)
            if(r == i) return p; 
        return NULL:
    }
    
    bool getData(int i, T &x) const
    {
        if(Node *p = Locate(i) != NULL)
        {
            x = p->data;
            return true;    
        }
        return false;
    }
    
    bool setData(int i, T &x)
    {
        if(Node *p = Locate(i) != NULL)
        {
            p->data = x;
            return true;    
        }
        return false;
    }
    
    bool Insert(int i , T &x)
    {
        last++;
        for(Node<T> *p = Head->next, int r = 1; p != NULL; p = p->next, r++)
            if(r + 1 == i || p->next = NULL) p->next = new Node(x, p->next);
    }    
    
    bool Remove(int i, T &x)
    {
        if(Node *p = Locate(i - 1) != NULL || p->next != NULL)
        {
            Node *d = p->next;
            p->next = d->next;
            delete d;
            return true;    
        }
        return false;
    }
    
    bool IsEmpty() const { return Head->next == NULL ? true : false; }
    
    bool IsFull() const { return false; }
    
    void sortInsert(T x)
    {
        node *p = Head->next;
           if(p->next == NULL)
            {
               p->next = new node(x, NULL);
                return ;
        }
            
        for(; p->next != NULL; p = p->next)
           {
               if(p->next->num > x)
            {
                   p->next = new node(x, p->next);
                return ;
            }
        }
        p->next = new node(x, NULL);
    }
    
    void Sort()
    {
        Node *head = new Node();
        for(Node *p = Head->next; p != NULL; p = p->next)
            head->sortInsert(p->data);
        this.makeEmpty();
        this.Head = head;            
    }
    
    void input()
    {
        int n;
        cin >> n;
        for(int i = 0; i < n; i++)
        {
            int x;
            cin >> x;
            this->Insert(i + 1; x);
        }    
    }
    
    void output()
    {
        cout << "{";
        for(Node *p = Head->next; p != NULL; p = p->next)
            cout << p->data << " ";
        cout << "}" << endl;
    }
    
    List<T> &operator = (List<T> &L)
    {
        this->makeEmpty();
        for(Node *p = L.Head->next, Node *P = Head; p != NULL; p = p->next, P = P->next)
            P->next = new(p->data);
        return this->Head;
    }
}; 

int main()
{
    
}

今晚思路好乱, 我他喵的也不知到我在写什么了, 代码还没编译通过, 贴上方便用手机看。。。

 

以上是关于单链表的主要内容,如果未能解决你的问题,请参考以下文章

数据结构代码(用C语言) 单链表的插入和删除

单链表

数据结构--单链表简单代码实现(总结)

单链表逆置

循环链表(循环单链表循环双链表)的相关操作的代码实现(C语言)

单链表反转java代码