#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
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/349928
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!