Изо всех сил пытается преобразовать целое число в связанный список. Не уверен, что я делаю не так здесь - PullRequest
0 голосов
/ 26 февраля 2020

Следующий код должен взять целое число (которое является числителем) и преобразовать его в связанный список, начиная с самого конца. Например, для целого числа 603 я хочу создать 3-> 0-> 6. Но по какой-то причине мой вывод дает мне только 0-> 6 и полностью игнорирует 3? Я просмотрел свой код и просто не могу понять, где моя логика c работает неправильно.

    struct ListNode {
      int val;
      ListNode *next;
      ListNode(int x) : val(x), next(NULL) {}
    }

    int numerator = sum1 + sum2;

    ListNode * ptr;

    while (numerator != 0) {

        int val = numerator % 10;
        numerator = numerator / 10;

        ListNode * node = new ListNode(val);

        // If list is empty, add node.
        if (!ptr) {
            ptr = node;
        // If list is not empty, traverse to end of list and then append.
        } else {

            while (ptr->next) {
                ptr = ptr->next;
            }
            ptr->next = node;
        }
   }

1 Ответ

2 голосов
/ 26 февраля 2020

Ваш код теряет заголовок списка, потому что он хранится в ptr, который изменяется при каждой вставке.

Вы можете добавить узел в односвязный список более эффективным способом:

ListNode* head = 0;
ListNode** tail = &head;

// ...    

// Append the new node to the tail of the list.
ListNode* node = new ListNode(val);
*tail = node;
tail = &node->next;
...