Начинающий - ошибка переназначения указателя Доступ к члену в пустом указателе - PullRequest
0 голосов
/ 02 февраля 2020

Пытается понять, почему newLL остается нулевым указателем в следующем коде ( Строка 30: Char 16: ошибка времени выполнения: доступ к элементу внутри нулевого указателя типа 'struct ListNode' (решение. cpp) ) пока temp0 ведет себя как положено. Спасибо за помощь.

Проблема: Вам даны два непустых связанных списка, представляющих два неотрицательных целых числа. Цифры хранятся в обратном порядке, и каждый из их узлов содержит один ди git. Добавьте два числа и верните их в виде связанного списка. Вы можете предположить, что два числа не содержат начального нуля, кроме самого числа 0.

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {

    ListNode *temp0 = NULL;
    ListNode *temp1 = l1;
    ListNode *temp2 = l2;

    //keep track of head
    ListNode *newLL = temp0;

    int x, y, z, f;

    //sum val's and create new nodes on newLL, until l1 or l2 hits a null
    while(temp1 != NULL && temp2 != NULL){
        x = temp1->val;
        y = temp2->val;
        z = x + y;

        temp0 = new ListNode(z);
        cout << temp0->val << endl;  //no error
        cout << newLL->val << endl;  //error

        temp0 = temp0->next;

        temp1 = temp1->next;
        temp2 = temp2->next;

        //concatenate the rest of l1 or l2 onto newLL
        if (temp1 == NULL){
            while (temp2 != NULL){
                y = temp2->val;

                temp0 = new ListNode(y);
                temp0 = temp0->next;

                temp2 = temp2->next;
            }
        }
        if (temp2 == NULL){
            while (temp1 != NULL){
                x = temp1->val;

                temp0 = new ListNode(x);
                temp0 = temp0->next;

                temp1 = temp1->next;
            }
        }
    }

    //loop through and for all numbers > 9, carry the digit
    temp0 = newLL;
    int r,d;

    while (temp0 != NULL) {
        if (temp0->val > 9){
            d = temp0->val / 10;
            r = temp0->val % 10;
            temp0->val = d;
            temp0 = temp0->next;
            temp0->val += r;
        } else {
            temp0 = temp0->next;
        }
    }
    //return newLL
    return newLL;
    }
};
...