如何通过递归方式反转一个循环链表?
递归反转循环链表的缺失代码补充
要完善这段递归反转循环链表的代码,缺失的一行是将当前节点的next指向原头节点head,这样在递归回溯时能正确构建反转后的节点指向,最终配合后续对head的调整完成循环链表的反转。
完整代码如下:
Node* reverseRecursive(Node* node) { if(node->next == head ) { return node; } auto res = reverseRecursive(node->next); node->next->next = node; node->next = head; // 补充的缺失代码 return res; }
逻辑说明:
- 递归终止条件:当当前节点的
next指向原头节点head时,说明已遍历到原链表的尾节点,将其作为反转后的新头节点返回。 - 递归回溯阶段:将当前节点的下一个节点的
next指向自身,完成局部反转;同时将当前节点的next指向原头节点head,保证后续节点能正确链接到循环的“尾部”。 - 收尾调整:调用该函数得到新头节点
res后,需要执行head->next = res;,让原头节点(现在是反转后的尾节点)的next指向新头节点,形成完整的循环链表。
内容的提问来源于stack exchange,提问作者Shubham Namdev
相关产品推荐
相关产品推荐

