美文网首页
2020-05-26

2020-05-26

作者: 老吾老 | 来源:发表于2020-05-26 23:34 被阅读0次

单向链表

链表介绍

  • 一个节点示意图


    Node 示意
  • 一个单向链表示意图


    List 示意

代码

  • 结点类
template<typename T>class MyList;
template<typename T>class Node
{
    friend class MyList<T>;
private:
    T data;
    Node* Link;
    Node<T>(T k):data(k),Link(nullptr) {};//私有构造函数 初始化data 与 Link 
};
  • 链表类
template<typename T>class MyList
{
public:
    MyList() { _First = nullptr; };
    void Insert(T);//插入 从链表头插入
    void LookAll();
    void Remove(T);//删除
    void Inverse();//翻转
private:
    Node<T> *_First;
};
  • 整体代码
#pragma once
#ifndef _MYLIST_H_
#define _MYLIST_H_
#include<iostream>

template<typename T>class MyList;
template<typename T>class Node
{
    friend class MyList<T>;
private:
    T data;
    Node* Link;
    Node<T>(T k):data(k),Link(nullptr) {};//私有构造函数 初始化data 与 Link 
};

template<typename T>class MyList
{
public:
    MyList() { _First = nullptr; };
    void Insert(T);//插入 从链表头插入
    void LookAll();
    void Remove(T);//删除
    void Inverse();//翻转
private:
    Node<T> *_First;

};
template<typename T>void MyList<T>::Insert(T k)
{/* 表头存放数据的 
    或者说没有表头
*/
    Node<T>* NewNode = new Node<T>(k);
    NewNode->Link = _First;//插入的节点指针域指向表头
    _First = NewNode;//插入的节点成为新的表头
}
template<typename T>void MyList<T>::LookAll()
{
    for (Node<T> *i = _First; i; i=i->Link)
    {
        std::cout << i->data;
        if (i->Link)
        {
            std::cout << "->";
        }
    }
    std::cout << std::endl;
}
template<typename T>void MyList<T>::Remove(T k)
{
    Node<T> *NowNode ;
    Node<T> *Previous = nullptr;
    for (NowNode= _First;
        NowNode&&NowNode->data!=k;
        Previous=NowNode,NowNode=NowNode->Link)
    {
        ;
    }
    if (NowNode)
    {
        if (Previous)Previous->Link = NowNode->Link;
        else _First = _First->Link;
        delete NowNode;
    }
}
template<typename T>void MyList<T>::Inverse()
{
    Node<T>*p=_First, *q=nullptr;
    while (p)//p跳到链表末尾 nullptr就结束循环
    {
        Node<T> *r = q;//取出原q的内容
        q = p;//q被p覆盖
        p = p->Link;//p++
        q->Link = r;//q+1=原q
    }
    _First = q;
}
#endif // !_MYLIST_H_

反转成员函数的实现

  • 代码
template<typename T>void MyList<T>::Inverse()
{
    Node<T>*p=_First, *q=nullptr;
    while (p)//p跳到链表末尾 nullptr就结束循环
    {
        Node<T> *r = q;//取出原q的内容
        q = p;//q被p覆盖
        p = p->Link;//p++
        q->Link = r;//q+1=原q
    }
    _First = q;
}
  • 步骤图解


    Inverse 示意

相关文章

  • 2020-05-27

    2020-05-26 2020-05-26 成长日志第341天 家名:温暖有爱之家 家规:真诚待人不自欺,学会看见...

  • 自律卡week1:早起6天,跑步3次

    Day1 2020-05-26 ,周二 ? ,起床时间:06:18 跑步3公里,精神特别好。而且为接下来的一周排...

  • 情商营反思日志

    2020-05-26 你要啥,我要啥, 明确知道对方的诉求, 例子,亲子关系 孩子知道妈妈要什么,妈妈知道孩子要什...

  • 活着就意味必须要做点什么?

    2020-05-26 阵雨 北京·昌平 狗窝 上半年上班总计时间:15个工作日。几个月没记录生活,也无非就是那些鸡...

  • 这世界向来就不公平

    2020-05-26 比你优秀的人还比你努力,你有什么资格抱怨不公平。 不 我所抱怨的不公平,指的是,那种生来就无...

  • 2020-05-26 重回简书

    2020-05-26 我决定重回简书。 不知不觉中2020年过半了,这半年里,我感觉自己的思想有些退化,做事情总是...

  • GSVA算法部分

    2020-05-26 图1给了我们分析的完整过程,图2,3,4是分析的具体过程。 我们输入到GSVA文件中的表达数...

  • 家有四宝!龙凤成长记之第16天

    2020-05-26 1. 今天儿子自觉上钢琴陪练课。之后他说老师一般,但又不想换,怕别人因此没了这份工作,自己于...

  • 2020-05-27

    焦点解决网络初级第19期坚持分享第206天:2020-05-26 今天忙了一天,这会才开始写分享,看来这个分享又可...

  • 2020-05-26

    2020-05-26 爸爸不让我辍学,联系他的同学,让我去了南外栖霞小学。 这件事情发生后,王老师辞职了,据说他去...

网友评论

      本文标题:2020-05-26

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