删除链表中所有值为x的元素
删除链表中所有值为x的元素
1.不带头结点
(1)不带头结点递归删除
- 递归算法
- 删除不带头结点的单链表 L 中所有值为 x 的结点
1 |
|
(2)不带头结点非递归删除
1 | // while循环非递归删除 |
2.带头结点
(1)带头结点非递归删除
删除带头结点的单链表 L 中所有值为 x 的结点
1 |
|
3.单链表有无头结点的区别
头结点:在单链表第一个元素结点之前设置的一个结点, 数据域可以不存任何信息,指针域指向单链表第一个元素的结点。
头指针:指向单链表的第一个结点的指针, 如果单链表有头结点,则头指针指向头结点 ,如果单链表没有头结点,则头指针指向第一个首元结点。
首元结点:单链表中第一个有数据元素的结点。如果单链表有头结点,则首元结点为头结点的下一个结点,如果单链表没有头结点,则首元结点就是单链表的第一个结点。
设置头结点的优点:
减少了单链表添加与删除时特殊情况的判断,减少程序的复杂性。
主要是添加和删除在第一个有元素的结点(首元结点)上有区别,如果链表没有头结点,则删除或添加时都得需要判断一次首元结点,有头结点以后,首元结点实际为链表的第二个结点,使得所有的元素结点的添加删除更具有统一性。便于空表和非空表的统一处理,
无论链表是否为空,头指针都是指向头结点的非空指针。
presethead.h
1 |
|
presetnohead.h
1 |
|
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.