【发布时间】:2022-11-21 12:12:44
【问题描述】:
我有一个 Leetcode 问题,No.142,Linked List Cycle II。我的代码就像这样:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *detectCycle(struct ListNode *head) {
struct ListNode *flag = (struct ListNode *)malloc(sizeof(struct ListNode));
int count = 0;
while (head != NULL) {
if (head -> next == flag) {
free(flag);
return head -> val;
}
head -> val = count;
++count;
struct ListNode *p = head;
head = head -> next;
p -> next = flag;
}
free(flag);
return -1;
}
运行后,出现释放后堆使用错误。我该如何解决?
【问题讨论】:
-
检查完每个节点后,我会将其 NEXT 更改为 FLAG,将 VAL 更改为索引(也包括计数)。如果有循环,head -> next会是FLAG。在那种情况下,我可以返回 val。
标签: c malloc heap-memory free