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

来源:互联网 发布:英语单词翻译软件 编辑:程序博客网 时间:2024/06/05 07:59

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

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;}

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

阅读全文
0 0