自定义带头结点的单链表类(C++)----------测试(二)

题目:请完成下面这个类的方法代码,请实现带头结点的单链表

class Link
{
public:
    Link(); //构造函数
    ~Link(); //析构函数
    void insertHead(int val); //头插法
    void insertTail(int val); //尾插法
    void deleteNode(int val); //删除链表所有值为val的节点
private:
    class Node
    {
    public:
        Node(int data=0):_data(data), _pnext(NULL){}
        int _data;
        Node *_pnext;
    };
    Node *_phead;
};

实现

构造函数
Link::Link()
{
    _phead =new Node();
}

题目中,有个内置类,这个类是关于节点的,有节点值,也有节点的下一个指针。

析构函数
Link::~Link()
{
    Node *point = _phead->_pnext;
    while (point !=NULL)
    {
        _phead->_pnext = point->_pnext;
        delete point;
        point = _phead->_pnext;
    }
    delete point;
    _phead = NULL;  
}

需要动态删除每一个节点。

头节点插入元素
void Link::insertHead(int val)
{
    Node *point = new Node(val);
    point->_pnext = _phead->_pnext;
    _phead->_pnext = point;
}

使用内置节点生成一个节点元素,并将该节点挂在头节点之后。

尾节点插入元素
void Link::insertTail(int val)
{
    Node *point = new Node(val);
    Node *p = _phead;
    while (p->_pnext !=NULL)
    {
        p = p->_pnext;
    }
    p->_pnext = point;
}

首先查找尾节点,然后把新节点挂到尾节点之后,新节点就成为了尾节点。

删除链表所有值为val的节点
void Link::deleteNode(int val)
{
    Node *point = _phead;
    Node *pcur = _phead->_pnext;
    while (pcur!=NULL)
    {
        if (pcur->_data==val)
        {
            point->_pnext = pcur->_pnext;
            delete pcur;
            pcur = point->_pnext;
        }
        point = pcur;
        if (pcur!=NULL)   //如果需要删除的元素是最后一个,则此时的pcur==null,故不能再取_pnext值
        {
            pcur = pcur->_pnext;
        }       
    }
}

首先查找满足条件的节点,最后将该节点删除。并且需要注意最后一个判断。

测试函数

int main(int argc, _TCHAR* argv[])
{
    Link link;
    link.show();
    link.insertHead(1);
    link.show();
    link.insertHead(2);
    link.show();
    link.insertHead(3);
    link.show();
    link.insertTail(4);
    link.show();
    link.insertTail(5);
    link.show();
    link.insertTail(1);
    link.show();
    link.deleteNode(1);
    link.show();
    return 0;
}

运行结果:
这里写图片描述
欢迎指正!

猜你喜欢

转载自blog.csdn.net/u013266600/article/details/78543409
今日推荐