#include <iostream>
using namespace std;
struct ListNode
{
int mValue;
ListNode * mNextNode;
};
void AddToTail(ListNode ** pHead, int value)
{
ListNode * pNew = new ListNode();
pNew->mValue = value;
pNew->mNextNode = NULL;
if (*pHead == NULL)
{
*pHead = pNew;
}
else
{
ListNode * pNode = *pHead;
while (pNode->mNextNode != NULL)
pNode = pNode->mNextNode;
pNode->mNextNode = pNew;
}
}
void PrintList(ListNode * head)
{
ListNode * pNode = head;
while (pNode)
{
cout << pNode->mValue<<" ";
pNode = pNode->mNextNode;
}
cout << endl;
}
//代码非常好,命名,格式都非常美观
void RemoveNode(ListNode ** pHead, int value)
{
if (pHead == NULL || *pHead == NULL)
return;
ListNode * pToBeDeleted = NULL; //这个命名,之前没任何相关的意识
if ((*pHead)->mValue == value)
{
pToBeDeleted = *pHead;
*pHead = (*pHead)->mNextNode;
}
else
{
ListNode * pNode = *pHead;
while (pNode->mNextNode != NULL && pNode->mNextNode->mValue != value)
pNode = pNode->mNextNode;
if (pNode->mNextNode != NULL )
{
pToBeDeleted = pNode->mNextNode;
pNode ->mNextNode = pNode->mNextNode->mNextNode;
}
}
if (pToBeDeleted != NULL)
{
delete pToBeDeleted;
pToBeDeleted = NULL;
}
}
int main()
{
ListNode *head = NULL;
int i = 10;
AddToTail(&head, i--);
AddToTail(&head, i--);
AddToTail(&head, i--);
AddToTail(&head, i--);
AddToTail(&head, i--);
AddToTail(&head, i--);
AddToTail(&head, i--);
AddToTail(&head, i--);
AddToTail(&head, i--);
PrintList(head);
RemoveNode(&head, 8);
PrintList(head);
RemoveNode(&head, 6);
PrintList(head);
RemoveNode(&head, 4);
PrintList(head);
RemoveNode(&head, 2);
PrintList(head);
return 0;
}
链表基本操作
最新推荐文章于 2022-08-29 14:49:54 发布