我的链接列表反向递归方法的代码的问题是什么?
Whats the issue with my code for Linked List reversal Recursive Method?
我正在尝试使用递归逆转链接列表。当我显示列表后,我只获取原始列表的第一个元素
void reve(node *a,node *b,node *c,node *h1)
{
if(c->next==NULL)
{
c->next=b;
b->next=a;
return ;
}
reve(a->next,b->next,c->next,h1);
c->next=b;
b->next=a;
if(a==h1)
{
a->next=NULL;
}
return ;
}`
这是因为您的调用代码仍然包含一个曾经是首先的节点的指针,但是该节点现在是最后的。
(至少如果代码实际上有效 - 很难跟踪所有这些参数,它们的关系与他们的名字一样神秘。(
如果您将指针返回到新的头部。
您也只需要一个(1(参数。
然后您有三种情况可以处理:
- 空列表 - 只需返回空列表;
- 单身列表 - 只需返回;
- 一般情况。
您可以通过首先逆转列表的其余部分来解决一般情况,从而接收新的头部。
然后,您需要将"新的最后一个元素"的 next
指向"此节点",以使" this"节点成为反向列表的下一个元素。
这比听起来要容易 - 您从递归中获得的反向列表中的最后一个节点仍然是该节点的next
节点。
(如果不清楚,请在纸上绘制。(
然后,您还需要通过将其next
终止列表终止列表。
然后返回您从递归中收到的"新头"。
node* reverse(node* n)
{
// Empty list:
if (!n)
{
return nullptr;
}
// Singleton list:
if (!n->next)
{
return n;
}
// General case:
node* head = reverse(n->next); // Reverse the rest,
n->next->next = n; // Attach this node at the end,
n->next = nullptr; // Terminate the list,
return head; // Done.
}
相关文章:
- 在黑客地球上没有获得以下C ++代码问题的输出
- VS 代码C++问题
- 插入操作的二叉搜索树代码问题
- 如何在代码问题中解决此问题 代码强制
- 发送和十六进制消息时套接字代码C++问题
- 代码问题将字符串转换为图表执行
- C 代码问题?编译器问题?代码块
- 代码问题.使用矢量删除相同的数字,除了它的最后一个入口
- 迭代列表以查找元素的出现.代码问题
- 使用JNI从Java调用本机(C++)函数时发生访问冲突:这是我的代码问题,还是已知问题
- XCode 4.5简单的OpenGL C 代码问题
- 在VS 2010上使用boost::interprocess生成代码问题
- 简单代码问题-未定义标识符
- 基本的c++代码问题
- 识别C++代码问题
- C++角色战斗代码问题
- OpenScenegraph 示例代码问题
- PortAudio示例代码问题
- 关于cout和cin的c++简单代码问题
- 关于歧义排列的代码问题