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();
}

完整代码

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

输出结果

 

 

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;
}
代码解析

 

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

这里的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时,删除的为链表中除头节点的第一个节点。

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

如图所示。

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

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

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

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/349928

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午5:59
下一篇 2023年3月2日 上午6:00

相关推荐