首页 > 编程语言 > 详细

02基础编程知识_c++单链表

时间:2020-05-21 13:57:32      阅读:46      评论:0      收藏:0      [点我收藏+]
#include <iostream>
using namespace std;

class Node
{
public:
    int _value;
    Node* _next;
public:

    Node() = default;
    Node(int value,Node *next)
        :_value(value),_next(next){}
};
class SingleLink
{
public:
    SingleLink();
    Node* getNode(int index);
    Node* insert(int index, int t);
    Node* Head_insert(int t);
    Node* Last_insert(int t);
    Node* Del(int index);
    Node* Del_head();
    Node* Del_last();
    void pirnt();
    bool IsEmpty();
    int size();
private:
    int count;
    Node* phead;
};
SingleLink::SingleLink() :count(0), phead(nullptr)
{
    phead = new Node();
    phead->_next = nullptr;
};
Node *SingleLink::getNode(int index)
{
    if (index > count || index < 0)  //getNode 函数,当传入0 index时,返回head,传入1 index时,返回链表第一个元素。
        return nullptr;
    int temp = 0;
    Node* preNode = phead;
    while (temp<index)
    {
        temp++;
        preNode = preNode->_next;
    }
    return preNode;
}
Node* SingleLink::insert(int index, int t)
{
    Node* preNode = getNode(index);
    if (preNode)
    {
        Node* newNode = new Node(t,preNode->_next);
        preNode->_next = newNode;
        count++;
        return newNode;
        
    }
    return nullptr;
}
Node* SingleLink::Head_insert(int t)
{
     return insert(0,t);
}
Node* SingleLink::Last_insert(int t)
{
    return insert(count, t);
}
Node* SingleLink::Del(int index)
{
    if (IsEmpty())
        return nullptr;
    Node* ptrNode = getNode(index);   //例:传入序号0,得到head头节点。
    Node* delNode = ptrNode->_next;   //通过得到head->next,得到要删除节点的位置
    ptrNode->_next = delNode->_next;  //将del->next的 位置赋予头节点的下一个位置。
    count--;
    delete delNode;  
    return ptrNode;
}
Node* SingleLink::Del_head()
{
    return Del(0);
}
Node* SingleLink::Del_last()
{
    return Del(count);
}
bool SingleLink::IsEmpty()
{
    return count == 0;
    
}
void SingleLink::pirnt()
{
    Node* prt = phead;    //定义一个类指针存储phead, 
    while (prt!=nullptr)  // 每次通过prt->next移动指针,直到移动null跳出循环
    {
        cout << prt->_value<<endl;
        prt = prt->_next;
    }
}
int SingleLink::size()
{
    return count;
}

int main()
{
    SingleLink* link = new SingleLink();
    int a[] = {20,30,40};

    for (int i=0;i<3;i++)
    {
        link->Head_insert(a[i]);
    }
    link->pirnt();
    link->Del_head();
    cout <<"删除头节点"<< endl;
    link->pirnt();
    
    cout << "1号位置插入5" << endl;
    cout << endl;
    link->insert(1,5);
    link->pirnt();
}

完整代码

技术分享图片

输出结果

 

 

Node *SingleLink::getNode(int index)
{
    if (index > count || index < 0)  //getNode 函数,当传入0 index时,返回head,传入1 index时,返回链表第一个元素。
        return nullptr;
    int temp = 0;
    Node* preNode = phead;
    while (temp<index)
    {
        temp++;
        preNode = preNode->_next;
    }
    return preNode;
}
代码解析

 

技术分享图片

这里的index指:即0为头节点,序号1为第一个节点,

 

Node* SingleLink::Del(int index)
{
    if (IsEmpty())
        return nullptr;
    Node* ptrNode = getNode(index);   //例:传入序号0,得到head头节点。
    Node* delNode = ptrNode->_next;   //通过得到head->next,得到要删除节点的位置
    ptrNode->_next = delNode->_next;  //将del->next的 位置赋予头节点的下一个位置。
    count--;
    delete delNode;  
    return ptrNode;
}

删除代码:

当传入index 为0时,删除的为链表中除头节点的第一个节点。

技术分享图片

如图所示。

头插法:可将一个数组插入后,顺序变为倒叙。

尾插法:为一种动态插入,随着count++的增加,每次插入的位置都为链表的最后一个位置。

02基础编程知识_c++单链表

原文:https://www.cnblogs.com/zsymdbk/p/12930020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!