list

 

 

#include <cstring>
template <class Tp>
struct ListNode
{
    Tp data;
    ListNode* next;
    ListNode* prev;
};

template <class Tp>
class List
{
public:
    List()
    {
        m_node = new ListNode<Tp>;
        m_node->next = m_node;
        m_node->prev = m_node;
    }
    ~List() 
    {
        clear();
        delete m_node;
    }
    void push_back(const Tp& x)
    {
        ListNode<Tp>* tmp = new ListNode<Tp>;
        tmp->data = x;
        tmp->next = m_node;
        tmp->prev = m_node->prev;
        m_node->prev->next = tmp;
        m_node->prev = tmp;
    }
    void pop_front()
    {
        ListNode<Tp>* begin = m_node->next;
        begin->prev->next = begin->next;
        begin->next->prev = begin->prev;
        delete begin;
    }
    Tp front()
    {
        return m_node->next->data;
    }
    bool empty()
    {
        return m_node->next == m_node;
    }
    void clear()
    {
        ListNode<Tp>* cur = m_node->prev;
        while (cur != m_node)
        {
            ListNode<Tp>* tmp = cur;
            cur = cur->next;
            delete tmp;
        }
        m_node->next = m_node;
        m_node->prev = m_node;
    }
private:
    ListNode<Tp>* m_node;
};

 

posted @ 2023-06-06 23:33  ho966  阅读(61)  评论(0编辑  收藏  举报