记住头元素:
单向链表的头元素必须至始至终要记住,否则链表将会在内存中丢失。这意味着在链表第一个元素之前插入新元素或删除链表第一个元素时,指向链表头的指针或引用必须更新。
在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;
}
分享到:
相关推荐
图+查找+排序+循环链表+循环链表+数组+广义表+二叉树与树的转换+哈夫曼树
链表逆置是计算机科学中一个重要的算法问题,它涉及到链表数据结构的操作和算法设计。在本文中,我们将详细讨论链表逆置的背景、原理、不同方法以及实际应用。 链表是一种常见的数据结构,用于存储一系列元素,其中...
Java算法实例-双向链表操作,封装性高,考试、学习都可使用
自己编写的双向链表功能实现算法,纯自己瞎编的,虽然用来混点分数,但还是可以做为参考的吧,哈哈
(2)删除链表的第i个元素,输出该元素,显示链表; 三)就地置逆+求最大最小值 在题目(一)的单链表中: (1)将链表就地逆置 ,显示链表; (2)求链表中的最大,最小值,显示结果; 四) 链表的合并 (1)创建两个链表LA...
python算法-数组和链表 数组和链表.pdf
5)查找操作:查找值为x的元素在单链表中出现的位置(是链表中的第几个元素)。 3、 为便于观察程序的运行结果,设计的输出函数能在输出设备上以图形或表格或其它直观的形式输出计算结果。例如可将链表输出成如下...
通过链表实现几种排序算法,并比较它们的优劣。
数据结构的双链表算法:双链表基本运算插入前插入后,循环双链表的基本运算。用C++语言写的控制台程序。
创建空的双向链表; 逐字符读取键盘输入的合法...(【提示】:可以利用双向链表的头指针和尾指针,其中头指针往链表尾部移动,尾指针向链表头部方向移动。当头尾指针最后能相遇时,则可认为输入字符串是首尾对称的。)
在单向链表中删除所有的偶数元素结点。 5.编写在非递减有序链表中插入一个元素使链表元素仍有序的函数,并利用该函数建立一个非递减有序单向链表。 6.利用算法5建立两个非递减有序单向链表,然后合并成一个非...
一个带头结点的单循环链表,结点类型为(data.next),以haed为头指针,每个结点的data域存放的是一个整数,试构造一个删除所有值大于min,小于max的结点的算法
c语言链表的排序算法-排序链表最快的算法是什么?.pdf
数据结构算法习题答案带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针).docx
链表结点插入算法
1.初始化 2.清空 3.求链表长度 4.检查链表是否为空 5.检查链表是否为满 6.遍历链表(设为输出元素7.从链表中查找元素 8.从链表中查找与给定元素值相同的... 从链表中删除元素 其他键退出。。。。。 其中黑体部分必做
《数据结构》作业系统题目:按要求删除链表中的元素,并保持链表连续性
链表相同元素删除 TC和W-TC已运行成功
算法__链表的操作
建立三个链表,然后删除A链表中与B,C链表中相同的元素,打印出各链表中的数据元素。