C++链表基本操作



一、先定义好链表的节点结构

template<class DataType>
struct pNode
{
    DataType data;
    pNode<DataType>* next;
    pNode(DataType d = 0) :data(d), next(NULL)   //在c++中可以在结构中写构造函数
    {}

};

二、链表的基本操作

1.链表的构造

template<class DataType>

class LinkList
{
private:
    pNode<DataType>* head;
public:
    typedef pNode<DataType> Node;
    LinkList():head(NULL)
    {
        sum = sum + nn;
        nn++;
    }
    LinkList(LinkList& l)
    {
        if (l.head)
        {
            pNode<DataType>* p = l.head;
            head = new Node(p->data);
            p = p->next;
            pNode<DataType>* node = head;
            while (p)
            {
                node->next = new Node(p->data);
                node = node->next;
                p = p->next;
            }
        }
        else
            head = l.head;
    }

};

2.链表的尾插

 void PushBack(DataType d)
    {
        if (head == NULL)
        {
            head = new pNode<DataType>(d);
            return;
        }
        else
        {
            pNode<DataType>* ret = head;
            while (ret->next != NULL)
            {
                ret = ret->next;
            }
            ret->next = new pNode<DataType>(d);
        }

    }

3.链表的头插

    void PushFront(DataType d)
    {
            pNode<DataType>* ret = new pNode<DataType>(d);
            ret->next = head;
            head = ret;

    }

4.链表尾删

    void PopBack()
    {
        pNode<DataType>* p = head;
        while (p->next->next)
        {
            p = p->next;
        }
        free(p->next);
        p->next = NULL;

    }

5.链表头删

    void PopFront()
    {
        pNode<DataType>* p = head->next;
        free(head);
        head = p;

    }

6.打印链表

    void PrintList()
    {
        pNode<DataType>* ret = head;
        while (ret != NULL)
        {
            cout << ret->data << "->";
            ret = ret->next;
        }
        printf("NULL\n");

    }

7.获取头部

    pNode<DataType>* GetRoot()
    {
        return head;

    }

8.查找某一节点

    Node* ResearchNode(DataType d)
    {
        Node* cur = head;
        while (cur)
        {
            if (cur->data == d)
                return cur;
            cur = cur->next;
        }
        return NULL;
    }  


    三、总结

        在这里我用C++只实现了链表的一些简单操作,在后续的更新中将会探讨关于链表的其他比较复杂的操作。在这些简单操作中,大家一定要注意细节,否则很容易出现一些低级错误。希望这篇文章对初学C++的同学有所帮助。

阅读更多

没有更多推荐了,返回首页