美文网首页
单链表的头插、遍历、删除(c++)

单链表的头插、遍历、删除(c++)

作者: 三角绿毛怪 | 来源:发表于2019-07-19 23:30 被阅读0次

    头文件

    #pragma once
    #include <iostream>
    using namespace std;
    
    //创建一个节点
    //先声明一下list类
    template <class T> class List;
    template <class T>
    class Node
    {
        //对list类作友元
    friend class List<T>;
    private:
        //创建一个数据域
        T data;
        //创建一个指针域
        Node* link;
        //节点的构造函数
        Node(T);
    };
    template <class T>
    class List
    {
    public:
        //构造函数,初始化一下first指向0
        List() { first = 0; };
        //头插
        void head_add(T);
        void show_list();
        void delete_node(T);
    private:
        //设置链表最开始的指针
        Node<T> *first;
    };
    //节点的构造函数
    template<class T>
    Node<T>::Node(T elem)
    {
        data = elem;
        link = 0;
    }
    template<class T>
    //头插法
    void List<T>::head_add(T k)
    {
        //创建一个新的指针,开辟一个新的节点,把要插入的元素传进来
        Node<T>* new_node = new Node<T>(k);
        //?这个地方是吧new_node指向了first,first=0,所以是指向了first的0吗?
        new_node->link = first;
        //?然后first又指向了new_node了吗?
        first = new_node;
    }
    //show函数
    template<class T>
    void List<T>::show_list()
    {
        //通过一个指针来从头走到尾
        //定义一个指针,如果他不指向空,它等于它的下一个
        for (Node<T> *i = first;i; i = i->link)
        {
            //输出当前所指向的数据域
            cout << i->data;
            //如果它的下一个不为空输出“->”
            if (i->link) cout << "->";
        }
        cout << endl;
    }
    template<class T>
    void List<T>::delete_node(T k)
    {
        Node<T>* pre = 0;
        Node<T>* cur;
        for (cur = first;cur && cur->data != k;pre = cur , cur = cur->link)
        {
            //空循环什么都不做,就找到那个元素
        }
        if (cur)
        {
            if (pre) pre->link = cur->link;
            else first = first->link;
            delete cur;
        }
    }
    

    源文件

    #include<iostream>
    using namespace std;
    #include"单链表基本操作.h"
    
    int main()
    {
        List<int> l1;
        l1.head_add(5);
        l1.head_add(25);
        l1.head_add(35);
        l1.head_add(45);
        l1.show_list();
    
        l1.delete_node(45);
        l1.show_list();
    
        return 0;
    
    }
    

    相关文章

      网友评论

          本文标题:单链表的头插、遍历、删除(c++)

          本文链接:https://www.haomeiwen.com/subject/dgwelctx.html