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++的增加,每次插入的位置都为链表的最后一个位置。

猜你喜欢

转载自www.cnblogs.com/zsymdbk/p/12930020.html