1 链表的创建
链表是一种物理存储单元上非连续、非顺序的存储结构。摘自百度百科
如下存储:
struct Node
{
int data; //数据域
Node* next;//指针域
Node():data(0),next(nullptr){}
Node(int _data,Node* _next)
{
this->data = _data;
this->next = _next;
}
};
1.1 头插
void pushFront(Node* head, int data)
{
Node* pNew= new Node(); //定义新节点头
pNew->data = data; //存储数据
if (nullptr== head->next) //判断是不是只有头结点
{
head->next = pNew;
}
pNew->next = head->next;
head->next = pNew;
}
1.2 尾插
尾插:
申请一个新的节点pNew.将要插入的数据赋值给pNew节点的数据域.并且将pNew的指针域指向空.
定义一个节点p指向head(实际操作时一般定义一个新的节点来操作,以便返回头结点)
void pushBack(Node* head, int data)
{
Node* pNew = new Node; //定义一个Node结点指针newNode
pNew->next = NULL; //定义newNode的数据域和指针域
pNew->data = data;
Node* p = head; //定义指针p指向头结点
if (head == NULL)
{ //当头结点为空时,设置newNode为头结点
head = pNew;
}
else //循环直到最后一个节点,将newNode放置在最后
{
while (p->next != NULL)
{
p = p->next;
}
p->next = pNew;
}
}
1.3 获取链表长度
int getLens(Node* head)
{
int lens = 0;
if (head->next!=nullptr)
{
lens++;
head = head->next;
}
return lens;
}
2 翻转链表
void reverse(Node* head)
{
if ((head->next == nullptr )||(head->next->next == nullptr))
{
return;
}
else
{
Node* pCur = head->next;
Node* pNext = pCur->next;
Node* pre = nullptr;
while (pNext)
{
pCur->next = pre;
pre = pCur;
pCur = pNext;
pNext = pCur->next;
}
pCur->next = pre;
head->next = pCur;
return;
}
}