自定义带头结点的单链表类(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;
}

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值