一、链表概念
1. 头指针
(1)头指针是链表中必须存在的
(2)头指针中存储的是第一个节点的地址,若链表中存在头节点,那么头指针存储的是头节点的地址,若头节点不存在,则存储的是首元节点的地址
2. 头节点
(1)头节点不是必须存在的
(2)头节点中可以不存储任何东西,也可以存储如链表长度等
3. 节点
(1)节点由两部分组成,一部分存储的为值即Value,另外一部分存储了一个指针,指针存储的是下一个节点的地址
4. 链表
链表是一种动态存储的数据结构,需要对指针进行操作
二、链表定义
1.单链表
单链表是指,尾结点指针为NULL的链表
struct ListNode //用结构定义节点,节点中包含一个值和一个指针
{
int m_nvalve;
ListNode * m_pnext;
};
在尾结点处插入一个值
void AddToTail(ListNode ** pHead,int value)
{
ListNode *pNew = new ListNode(); //新建一个节点a,存储需要存放的值
pNew ->m_nvalve = value;
pNew ->m_pnext = nullptr;
if (*pHead == nullptr) //判断头指针是否为空,若头指针为空,使得头指针指向新建节点
{
*pHead = pNew;
}
else
{
ListNode *pNode = *pHead; //新建一个节点b,使得它与头指针的值一致,头指针不为空,说明该链表不为空
while(pNode -> m_pnext != nullptr) //节点指针b未到达链表尾端时,节点b的指针指向下一个节点(存储下一个节点的地址),直到达到尾结点
pNode = pNode ->m_pnext; //
pNode ->m_pnext = pNew; //节点b到达尾结点时,使节点b的指针指向节点a
}
}