删除链表中值为value的节点
来源:互联网 发布:韩雪网络直播视频 编辑:程序博客网 时间:2024/05/17 18:15
1.源代码分析
(1)删除值为x的节点
//在带头结点的单链表L中,删除值为x的节点 void deleteSpecialData(Node* &L,int x) {while(L->next!=NULL){//当没有到达链表尾部的时候,继续循环 if(L->next->data == x){Node* q;//申请一个指针q q=L->next;//保存L->next的指针位置 L->next = L->next->next;//改变链表的指针 delete(q);//释放节点空间q } elseL= L->next;//往下循环 }}(2)遍历输出单链表L
//遍历输出单链表void traverseLinkList(Node* L){L = L->next;//切换到头节点 while(L!=NULL){//如果指针不为空 printf("%d ",L->data); L = L->next;//循环 }}
2.结果
(1)我们什么也看不到????
3.错误总结
(1)我们在对单链表L进行查找值,删除节点的时候,不能使用头结点指针L作为循环条件,因为在函数中对L进行遍历,所以到最后,L->next==NULL,紧接着,我们又要对链表L进行遍历输出,这个时候,恰好因为L->next == NULL ,故输出为空
(2)即链表中删除特定值操作不能以链表头指针L作为循环变量。类似,我们也可以知道,在其它操作中,我们都应该避免使用L指针作为循环变量。
4.正确代码
void deleteSpecialData(Node* &L,int x) {Node* r;r = L;while(r->next!=NULL){//当没有到达链表尾部的时候,继续循环 if(r->next->data == x){Node* q;//申请一个指针q q=r->next;//保存L->next的指针位置 r->next = r->next->next;//改变链表的指针 delete(q);//释放节点空间q } elser= r->next;//往下循环 }}5.总结
当我们需要删除单链表中某个值的时候,请记住以下几点:
(1)我们删除节点A,必须找到结点A的前一个结点,然后修改起后继结点,所以循环里用的是r->next->data,这里的r指的得是当前的判断结点。同样,所以while()循环中也是r->next!=NULL
0 0
- 删除链表中值为value的节点
- java 删除链表中值为x的节点
- 删除链表中值相同的多余节点
- 删除无序链表中值重复出现的节点
- 递归实现删除链表中值为x的元素
- LeetCode -- 删除链表中值为k的元素
- 链表问题---删除无序单链表中值重复出现的节点
- 将双链表中值为x的节点置为首节点
- WV.7-动态链表-删除链表中值为x的结点
- 203.Remove Linked List Elements(删除链表中值为X的结点)
- 删除链表中值为x的元素结点(java语言)
- 链表所有为key的节点全部删除
- 【剑指offer】链表相关-删除value值节点
- leetcode_203. Remove Linked List Elements 删除单链表中value为某个值的节点
- 6_44_二叉树中值为x的节点为根的子树的深度
- 83. Remove Duplicates from Sorted List (移除链表中值相等的节点)
- 链表(8)----删除链表的第K个节点,时间复杂度为O(1)
- 数据结构系列之链表——单链表删除值为num的节点
- Servlet编程实例 续3
- android studio 导入 slidingmenu
- favicon出现的问题
- HDU 4155 Eliminate the Conflict(2-SAT)
- 动态分配线程数目-保证系统负载
- 删除链表中值为value的节点
- java获取当前时间是星期几
- 虚拟机下Centos本地光盘yum源配置
- http请求本地文件,路径中含有空格的处理 QT
- JDBC--学习笔记(一)
- jsp实验3.(1)(2)表单内容的提交和获取
- 基于88E6095的链路冗余协议开发(二)
- (八)React Native实现调用android原生java方法并实现广播的发送和接受
- 类之间的关系-更合理的架构