编程之美:从无头单链表中删除节点,讨论
2014-10-05 11:19
288 查看
1.问题描写叙述
如果有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个),请将该节点从单链表中删除。
例如以下图所看到的:
这样的情况大家都知道,将下一个节点的data和next复制到当前节点,并将当前节点的next设置为下下个节点,然后释放下一个节点所占内存(free),
假设红字条件去掉:
还用上面的方法就有问题,一般上面方法的代码例如以下:
红色凝视说明了问题:将pCurrent设置为NULL并没有改变当前节点的上一个节点的next值,由于上一个节点的next存的是pCurrent指向的Node的地址。
简单来说就是pCurrent只存了一个内存地址,而将pCurrent设置为NULL这一行为,并没有改变上一节点的next值。假设当前节点是最后一个节点,那么上一个节点的next值就应该为NULL,可是显然上述方法无法达到这一要求。所以红字条件去掉之后就无法通过上述方法解决这个问题了。
啊
如果有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个),请将该节点从单链表中删除。
例如以下图所看到的:
这样的情况大家都知道,将下一个节点的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,可是显然上述方法无法达到这一要求。所以红字条件去掉之后就无法通过上述方法解决这个问题了。
啊
相关文章推荐
- 编程之美:从无头单链表中删除节点,讨论
- 编程之美:第三章 结构之法 3.4从无头单链表中删除节点
- 从无头单链表中删除某节点(编程之美3.4)
- 《编程之美》3.4 从无头单链表中删除/添加节点
- 《编程之美》——从无头单链表中删除节点
- 编程之美——从无头单链表中删除节点
- 编程之美:从无头单链表中删除节点
- 从无头单链表中删除节点
- 编程之美--从无头单链表中删除节点
- 编程之美-从无头单链表中删除节点方法整理
- 链表面试题逆序打印,删除无头非尾节点,非头位置插入,约瑟夫环,查找中间和倒数第k个节点
- 1.删除一个无头单链表的非尾节点 2.从尾到头打印单链表
- 编程之美—从无头链表中删除结点
- 从无头单链表中删除节点及单链表的反转操作
- 链表--删除一个无头单链表的非尾节点
- 从无头单链表中删除节点
- 无头单链表的非尾节点删除
- 从无头单链表中删除节点
- 编程之美-从无头单链表中删除节点
- 从无头单链表中删除节点及单链表的反转操作