【问题标题】:Struggling to convert an integer into a linked list. Not sure what I'm doing wrong here努力将整数转换为链表。不知道我在这里做错了什么
【发布时间】:2020-02-26 09:30:15
【问题描述】:

下面的代码应该采用一个整数(即分子)并将其转换为一个链表,从最后开始。例如,对于整数 603,我想创建 3->0->6。但是由于某种原因,我的输出只给了我 0->6,而完全忽略了 3?我查看了我的代码,但似乎看不出我的逻辑哪里出错了。

    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;
        }
   }

【问题讨论】:

  • ListNode * ptr; 是一个未初始化的指针。它的值通常不是 0,而是一些垃圾值。 if (!ptr) 的条件通常为假。请提供minimal reproducible example
  • 您可以通过确保所有变量都已初始化来避免无数错误。

标签: c++ singly-linked-list


【解决方案1】:

您的代码丢失了列表的头部,因为它存储在 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 2013-06-28
    • 2023-01-19
    相关资源
    最近更新 更多