从链接列表中消除混乱

问题描述 投票:0回答:1

我正在尝试进行一项练习,在该练习中,必须确保链接列表中的所有元素都是有序的(基本上,列表应按升序排列),如果任何元素大于下一个元素,则将其删除并从中删除记忆。这是我目前的尝试:

struct node *remove_disorder(struct node *head) {
    struct node *curr = head;
    struct node *prev = head;


    if (curr == NULL) {
        return NULL;
    }
    if (curr->next == NULL) {
        return head;
    }

    struct node *temp = NULL;
    while (curr->next != NULL) {
        while (curr->data > curr->next->data) {
            if (curr == head) {
                prev = curr->next;
                free(curr);
                curr = prev;
                curr->next = prev->next;
                head = prev;
            } else {
                prev->next = curr->next;
                temp = curr;
                curr = prev;
                curr->next = prev->next;
                free(temp);
            }
        }
        prev = curr;
        curr = curr->next;

    }
    return head;
}

编译器告诉我,即使我在释放新值后分配curr,我也正在访问while (curr->data > curr->next->data)中已释放的内存。有人可以指出我做错了吗?

c
1个回答
0
投票

您的代码有一些多余的分配。分配node2 = node1后,无需分配node2->next = node1->next

© www.soinside.com 2019 - 2024. All rights reserved.