记住头元素:
单向链表的头元素必须至始至终要记住,否则链表将会在内存中丢失。这意味着在链表第一个元素之前插入新元素或删除链表第一个元素时,指向链表头的指针或引用必须更新。
在C/C++中,很容易因误用指针而犯错误,如下面代码,它在链表的前面插入一个元素:
bool insertInFront(IntElement *head, int data)
{
IntElement *newItem = new IntElement;
if(!newItem)
return false;
newItem->data = data;
newItem->next = head->next;
head = newItem; //错误
return true;
}
上面的代码是不正确的,因为它只更新了头指针的“本地拷贝”。正确的版本是传入一个头元素指针的指针:
bool insertInFront(IntElement **head, int data)
{
IntElement *newItem = new IntElement;
if(!newItem)
return false;
newItem->data = data;
newItem->next = head->next;
*head = newItem; //正确啦
return true;
}
当然,在C++中,头指针也可以通过引用来传递。
删除单个元素:
bool deleteElement(IntElement **head, IntElement *deleteMe)
{
IntElement *elem = *head;
if(deleteMe == *head) //要删除的是头元素
{
*head = elem->next;
delete deleteMe;
return true;
}
while(elem)
{
if(elem->next == deleteMe)
{
elem->next = deleteMe->next;
delete deleMe;
return true;
}
elem = elem->next;
}
return false;
}
删除链表中的所有元素:
void deleteList(IntElement **head)
{
IntElement *deleteMe = *head;
while(deleteMe)
{
IntElement *next = deleteMe->next;
delete deleteMe;
deleteMe = next;
}
*head = NULL;
}
《算法之美》の链表问题の记住头元素+删除元素
原创
©著作权归作者所有:来自51CTO博客作者wx5dce75f541ce3的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
《算法之美》の链表问题の从链表中删除节点
问题:假设一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(既不是第一个,也不是最后一个节点),pCurrent->m_pNext != NULL。
算法 null delete 面试 struct -
《算法之美》の链表问题の两链表相交问题
编程判断两个链表是否相交问题:给出两个单向链表的头指针,比如head1和head2,判断
算法 null system 编程 扩展 -
《算法之美》の链表问题の单向链表的反转
<br />题目:输入一个链表的头节点,反转这个链表,并返回反转后链表的头节点,链表定义如下:<br />struct ListNode<br /节点
算法 null 存储 struct system -
《算法之美》の字符串相关问题の壹
题目:编写一个单词逆序输出的算法,例如输入“SEE YOU IN ANOTHER LIFE”,要求输出“LIFE ANOTHER IN YOU SEE”。解
算法 token iostream system null -
《算法之美》の递归与分治策略の全排列问题
全排列问题:设R={r1, r2, …, r3}是要进行排列的n个
算法 system 全排列 数组 i++ -
【☘️C语言の单链表是否有环问题☘️】
问题:给定一个单链表,只给出头指针,如何判断是否存在环?思路:使用快慢指针法
链表 c语言 数据结构 结点 头结点 -
《算法之美》のn个数连接得到最小的多位整数
<br />题目:设有n个正整数,将它们连接成一排,组成一个最小的多位整数?<br />例如:n=2时,2个整数32,3
算法 string iterator system c