从无头单链表中删除节点
来源:互联网 发布:网络上骰宝赢钱技巧 编辑:程序博客网 时间:2024/05/22 21:10
原文链接:http://blog.csdn.net/kk791159796/article/details/39375703
1.问题描述
假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个),请将该节点从单链表中删除。
如下图所示:
这种情况大家都知道,将下一个节点的data和next拷贝到当前节点,并将当前节点的next设置为下下个节点,然后释放下一个节点所占内存(free),(狸猫换太子)
如果红字条件去掉:
还用上面的方法就有问题,一般上面方法的代码如下:
void DeleteRandomNode(Node* pCurrent){ if(pCurrent == NULL) return; Node* pNext = pCurrent->next;
if(pNext == NULL)
{
//表明当前节点是最后一个节点
pCurrent = NULL;//这里如果为最后一个节点就将当前指针设置为NULL,这些写法有问题!
} pCurrent->data = pNext->data; pCurrent->next = pNext->next; delete pNext; }
红色注释说明了问题:将pCurrent设置为NULL并没有改变当前节点的上一个节点的next值,因为上一个节点的next存的是pCurrent指向的Node的地址。
简单来说就是pCurrent仅仅存了一个内存地址,而将pCurrent设置为NULL这一行为,并没有改变上一节点的next值。如果当前节点是最后一个节点,那么上一个节点的next值就应该为NULL,但是显然上述方法无法达到这一要求。所以红字条件去掉之后就无法通过上述方法解决问题了。
0 0
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 从无头单链表中删除节点
- 3.4 从无头单链表中删除节点
- 3.4 从无头单链表中删除节点
- 从无头单链表中删除节点--扩展:反转单链表
- 经典语录
- mvn 指定全局编码(mvn compile error 未结束的字符串/编码GBK的不可映射字符)
- sqlite sql 修改字段类型
- QMap使用类的对象作为key
- 学习计算机思路
- 从无头单链表中删除节点
- 函数调用修饰符__stdcall/__cdecl的理解
- 关于Git(一):贡献个一键打开关闭git socks5代理的脚本
- java面向对象的总结
- 恶意程序检测系统(未完成稿)
- C++转义序列的编码
- 统一管理Unity里面的Update
- cookie 和session 的区别详解
- DataGridView编辑后立即更新到数据库的两种方法 编辑单元格