首页 > 其他分享 >每天打卡一小时 第二十六天

每天打卡一小时 第二十六天

时间:2023-05-12 23:00:27浏览次数:37  
标签:Node 第二十六 const 每天 next headNode position 打卡 data

接昨天的题

#include <iostream>
using namespace std;

template <class T>
class Node
{
private:
    Node<T>* next;

public:
    T data;

    Node(const T& data, Node<T>* next = 0);
    Node(const Node<T>& p);
    ~Node();
    T getData();
};

template <class T>
Node<T>::Node(const T& data, Node<T>* next) : data(data), next(next)
{
    cout << "Node Constructor run" << endl;
}

template <class T>
Node<T>::Node(const Node<T>& p) : data(p.data), next(p.next)
{
    cout << "Node CopyConstructor run" << endl;
}

template <class T>
Node<T>::~Node()
{
    cout << "Node Destructor run" << endl;
}

template <class T>
T Node<T>::getData()
{
    return data;
}

template <class T>
class LinkList
{
private:
    Node<T>* headNode;
    Node<T>* position;

public:
    LinkList() : headNode(new Node<T>()), position(headNode)
    {
        cout << "LinkList Constructor run" << endl;
    }

    LinkList(const T arr[], int n) : headNode(new Node<T>()), position(headNode)
    {
        cout << "LinkList Constructor run" << endl;
        for (int i = n - 1; i >= 0; --i) {
            position->next = new Node<T>(arr[i], position->next);
        }
    }

    LinkList(const LinkList<T>& other) : headNode(other.headNode), position(other.position)
    {
        cout << "LinkList CopyConstructor run" << endl;
    }

    ~LinkList()
    {
        cout << "LinkList Destructor run" << endl;
        while (headNode->next) {
            Node<T>* p = headNode->next;
            headNode->next = p->next;
            delete p;
        }
        delete headNode;
    }

    bool searchNode(const T& value)
    {
        Node<T>* p = headNode->next;
        while (p) {
            if (p->getData() == value) {
                position = p;
                return true;
            }
            p = p->next;
        }
        return false;
    }

    int getSize()
    {
        int cnt = 0;
        Node<T>* p = headNode->next;
        while (p) {
            cnt++;
            p = p->next;
        }
        return cnt;
    }

    void next()
    {
        if (position->next) {
            position = position->next;
        }
    }

    Node<T>* currNode() const
    {
        return position;
    }

    void delNode()
    {
        if (!position)
            return;
        if (position == headNode) {
            headNode = headNode->next;
            delete position;
            position = headNode;
        } else {
            Node<T>* temp = headNode;
            while (temp->next != position) {
                temp = temp->next;
            }
            temp->next = position->next;
            delete position;
            position = temp->next;
        }
    }

    void insertNode(Node<T>* n)
    {
        const Node<T>* tmp = n;
        tmp->next = position->next;
        position->next = new Node<T>(*tmp);
        position = position->next;
    }

    void show() const
    {
        Node<T>* temp = headNode->next;
        while (temp) {
            std::cout << temp->data << " ";
            temp = temp->next;
        }
        std::cout << std::endl;
    }
};

int main()
{
    int i,a[5]= {0,1,2,3,4};
    for(i=0;i<5;i++)
        scanf("%d",&a[i]);
    LinkList<int> l1(a,5),l2(l1);
    cout<<l2.getSize()<<endl;
    l1.show();
    if (l2.searchNode(2))
        cout << "Found: " << l2.currNode()->getData() << endl;
    else
        cout<<"Not Found"<<endl;
    l2.delNode();
    Node <int> *p1=new Node<int>(11);
    l2.insertNode(*p1);
    l2.show();
    return 0;
}

  报错很多,修改很长时间,并没有解决问题

标签:Node,第二十六,const,每天,next,headNode,position,打卡,data
From: https://www.cnblogs.com/youxiandechilun/p/17396500.html

相关文章

  • c++打卡第二十四天
    一、亲密数1、问题描述 2、设计思路①、我们可以设计函数计算一个数的因子,将这些因子相加到一起,返回和并对这个返回值重新调用求因子函数,如果这个函数返回值为A,那么这两个数为亲密数,打印出AB。②、求因子可以对A进行2~A的遍历,同时c除余d,如果余数为0,那么d就是c的因子。3、流......
  • 2023.5.12编程一小时打卡
    一、问题描述:初始化int类型数组data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},先用任一种算法对其进行排序,然后用户输入一个数字,折半查找函数模板找出他的位置。 二、解题思路:首先对数组进行排序,然后用数组的下标进行折半查找,利用数组下标的比较大小进行替......
  • 打卡 c语言趣味编程 最佳存款问题
    假设银行一年整存零取的月息为0.63%。现在某人手中有一笔钱,他打算在今后的5年中的每年年底取出1000元,到第5年时刚好取完,请算出他存钱时应存入多少。思路:计算储蓄金额的数学公式为:储蓄金额=每年取出金额×(1+月息)^(存款年限×12)定义每年取出金额和存款年......
  • c++打卡练习(26)
    水仙花数:一个三位数,每个位上的数的三次方的和等于这个数本身,那么他就是水仙花数流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intmain(){ intbai,shi,ge,i,j=0; for(i=100;i<1000;i++){ bai=i/100; shi=(i-bai*100)/10; ge=i-bai*100-shi*10; if(i==bai*ba......
  • Linux 服务器下Mysql自动备份 30天滚动存储 每天凌晨2点准时备份
    一、创建备份目录执行命令:在指定路径下创建备份目录cd/mnt/filemkdirdata_backup二、编写shell脚本放在/mnt/file/data_backup里创建.shshell脚本:touchbkmysql.sh打开脚本文件:vim bkmysql.sh脚本文件内容如下所示:login_user表示数据库用户名......
  • 打卡23
    4.1最大公约数 #include<bits/stdc++.h>usingnamespacestd;intgcd(inta,intb)//求a和b的最大公约数{ returnb?gcd(b,a%b):a;//辗转相除法递归形式}intmain(){ inta,b;cin>>a>>b; cout<<gcd(a,b)<<endl;}......
  • 每天打卡一小时 第二十五天
     题目包含结点类模板 和 链表类模板 仅仅写出来结点类模板 template<classT>classNode{private:Node<T>*next;public:Tdata;Node(constT&data,Node<T>*next=0);Node(constNode<T>&p);~Node();T......
  • 第十七天打卡
    一、问题描述求爱因斯坦数学题.有一条长阶,若每步跨2阶,则最后剩1阶;若每步跨阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨7阶,则最后正好一阶不剩。请问在1~N内,有多少个数满足?二、设计思路1、输入阶梯数,然后定义i从7开始判断是否满足条件依次用if语句判断。三、程序......
  • 每日打卡-21.1
    一.问题描述使用I/O流以文本方式建立一个文件test1.txt,写入字符“已成功写入文件!”,用其它字处理程序(例如windows的记事本程序Notepad)打开,看看是否正确写入。二.设计思路三.流程图四.伪代码 1五.代码实现 1#include<fstream>#include<iostream>usingnamespacestd;int......
  • 每日打卡-21.3
    一.问题描述使用I/O流以文本方式打开上题建立的文件test1.txt,在次此文件后面添加字符“已成功添加字符!”,然后读出整个文件的内容显示出来,看看是否正确。二.设计思路三.流程图四.伪代码 1五.代码实现 1#include<fstream>#include<iostream>usingnamespacestd;intmai......