递归反转链表代码超时(TLE)问题:我的实现哪里出错了?
反转链表递归实现的超时问题分析
你的代码存在两个核心错误,直接导致了超时(TLE):
链表成环,引发无限遍历
递归处理时,你仅将p->next指向当前head,但未把原head->next置为NULL。举个例子,原链表是1->2->3,递归到最后一层返回3,随后将3->next设为2;接着返回2,把2->next设为1,但此时1->next仍指向2,形成了1<->2<->3的环。测试用例遍历结果链表时会陷入无限循环,最终触发超时。递归返回值错误
反转链表的递归实现中,每一层递归应返回反转后的新头节点(即原链表的尾节点),但你的代码每次返回当前的head(原链表的当前节点)。最终函数返回的是原链表的头节点,而该节点已处于环中,进一步加剧了遍历的无限循环问题。
修正后的代码如下:
struct ListNode* reverseList(struct ListNode* head) { if(head == NULL || head->next == NULL) return head; struct ListNode* newHead = reverseList(head->next); head->next->next = head; head->next = NULL; return newHead; }
内容的提问来源于stack exchange,提问作者Udita Gupta
相关产品推荐
相关产品推荐

