我搜索了以前提出的问题,但找不到我要找的确切内容。我很好奇是否有人知道如何删除链表的每个其他节点。我有一个名为 duplicate 的函数,它将 1 2 3
转换为 1 1 2 2 3 3
。删除所有其他节点就可以了,不需要比较它们或任何东西。如果有人有任何见解。请不要只发布源代码。
这是我尝试做但没有奏效的。
Node *current;
Node *undo;
for (current = front, undo = current->next->next;
undo != NULL; current = current->next, undo = current->next->next){
current->next = undo;
}
这将输出 1 1 2 2 3 3 3
感谢您的帮助。我可以稍后回复以澄清任何误解。
最佳答案
原代码:
for (current = front, undo = current->next->next;
undo != NULL;
current = current->next, // this moves current on before you use it's next pointer
undo = current->next->next){
current->next = undo;
}
修复,不释放不需要的节点(假设节点数量为偶数):
for (current = front; current != NULL; current = current->next){
current->next = current->next->next
}
处理奇数长度列表,并删除已删除节点的内存:
for (current = front; current && current->next ; current = current->next){
undo = current->next;
current->next = current->next->next
delete undo;
}
关于c++ - 删除链表的所有其他节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22164550/