Загрузка загрузки адреса во время выполнения при написании кода для объединения двух отсортированных связанных списков - PullRequest
0 голосов
/ 23 января 2019

Использование фиктивного узла для добавления меньшего узла списка l1 и списка l2.В конце возвращаем местоположение, указывающее рядом с фиктивным узлом, чтобы получить фактический объединенный отсортированный список, но получая загрузку адреса во время выполнения с недостаточным пространством для объекта типа struct ListNode при возврате dummyNode-> next.

struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
        if (l1 == NULL && l2 != NULL) {
                return l2;
        }
        if (l1 != NULL && l2 == NULL) {
                return l1;
        }
        struct ListNode *dummyNode = NULL;
        struct ListNode *head = NULL;

        dummyNode = (struct ListNode *)malloc(sizeof(struct ListNode *));
        head = dummyNode;

        while (l1 != NULL && l2 != NULL) {
                if (l1->val <= l2->val) {
                        head->next = l1;
                        l1 = l1->next;
                        head = head->next;
                }
                else {
                        head->next = l2;
                        l2 = l2->next;
                        head = head->next;
                }
        }
        if (l1 != NULL) {
                head->next = l1;
        }
        if (l2 != NULL) {
                head->next = l2;
        }    
        return dummyNode->next;
}


1 Ответ

0 голосов
/ 23 января 2019

Недостаточно места для передачи из-за передачи в malloc размера указателя на структуру sizeof(struct ListNode *). Следует изменить, чтобы выделить место для всей структуры -

dummyNode = (struct ListNode *)malloc(sizeof(struct ListNode));
...