03链表的插入和删除操作
//链表是一种动态数据结构,再创建链表时,无需知道链表的长度。
//插入链表时,分配内存(每添加一个)--调整指针指向---使其插入到链表中。
//遍历链表是从头结点遍历的,但是要备份头结点,用临时结点去遍历
//首先必须会定义一个链表结点--以下是单链表
//双链表的节点定义没有值。
看到链表,二话不说,先定义一个链表节点,
单链表的定义
struct ListNode
{
int val;
struct ListNode* next;
};
双链表的定义
struct DListNode
{
struct DListNode* pre;
struct DListNode* next;
};
//向链表的末尾添加一个节点
void AddToTail(ListNode** pHead, int value)
{
ListNode* pNew = new ListNode();
pNew->val = value;
pNew->next = NULL;
//鲁棒性
if (pHead == NULL)
{
*pHead = pNew;
}
else
{
//遍历链表,就要用备份结点进行操作。
//改变结点的指向,是对结点进行操作
ListNode* tmpNode = *pHead;
while(tmpNode->next != NULL)
{
tmpNode = tmpNode->next;
}
tmpNode->next = pNew;
}
}
//----------------向链表的末尾删除一个结点---------------------
void RemoveNode(ListNode** pHead, int value)
{
if (pHead == NULL ||*pHead == NULL)
{
return;
}
ListNode* pDeleteNode = NULL;
//分2种情况:头结点就是删除的结点;头结点不是要删除的结点
if(*pHead->val == value)
{
//节点的操作
pDeleteNode = *pHead;
*pHead = (*pHead->next);
}
else
{
ListNode* tmpNode = *pHead;
while(tmpNode->next!= NULL)
{
if (tmpNode->next->val == value)
{
break;
}
tmpNode = tmpNode->next;
}
pDeleteNode = tmpNode->next;
tmpNode->next = tmpNode->next->next;
}
if (pDeleteNode != NULL)
{
delete pDeleteNode;
pDeleteNode = NULL;
}
}
在代码的世界尽情的翱翔吧!