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

时间:2020-05-21
本文章向大家介绍02基础编程知识_c++单链表,主要包括02基础编程知识_c++单链表使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#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++的增加,每次插入的位置都为链表的最后一个位置。

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