如何在C++中将数字转换为链表
How to convert a number to a linked list in C++
我开始学习链表,并试图解决一个编程问题。输出需要是一个表示为链表的数字。例如,如果数字为 123,则链表需要为 3->2->1。
根据我的实现,我正在事先执行所有其他功能,并将最终的输出编号作为 int,并且需要将其转换为链表。我尝试了以下代码。
ListNode* numToLL(int sum){
ListNode* mainHead;
int remainder = sum % 10;
mainHead->val = remainder;
sum = sum / 10;
ListNode* head;
head = mainHead;
while (sum != 0){
ListNode* nextNode;
int remainder = sum % 10;
nextNode->val = remainder;
head->next = nextNode;
head = nextNode;
sum = sum / 10;
}
return mainHead;
}
我知道这是不正确的,但我不确定如何纠正它。此错误消息在函数内部的第 3 行显示:"运行时错误:类型为'struct ListNode'的空指针内的成员访问"。
这应该可以修复您当前的错误,不能保证没有其他错误。 :)做自己的功课
将ListNode* mainHead;
更改为ListNode* mainHead = new ListNode();
将为类类型 ListNode 的实例化分配内存,并返回分配给您声明的指针变量的内存地址。
如果没有此更改,您的 mainHead 变量包含一个可能指向任何内容的未知值。 从您的错误来看,它包含与 NULL 相同的值,但这不能保证。
同样的事情也适用于ListNode* nextNode;
->ListNode* nextNode = new ListNode();
ListNode* numToLL(int sum){
ListNode* mainHead = new ListNode();
int remainder = sum % 10;
mainHead->val = remainder;
sum = sum / 10;
ListNode* head;
head = mainHead;
while (sum != 0){
ListNode* nextNode = new ListNode();
int remainder = sum % 10;
nextNode->val = remainder;
head->next = nextNode;
head = nextNode;
sum = sum / 10;
}
return mainHead;
}
mainHead
和nextNode
都是未初始化的。 在访问其val
字段之前,您没有为其分配有效的ListNode
对象以供它们指向。
此外,您正在循环上方和内部重复相同的代码。 在编写代码时遵循 DRY 原则("不要重复自己"(是个好主意,随着时间的推移,它更容易维护。
在不重复代码的情况下在循环中填充链表的一个常见习惯用法是使用额外的间接寻址级别 - 指向等待分配的下一个ListNode*
指针的指针。 例如:
ListNode* numToLL(int sum)
{
ListNode* theList = NULL;
ListNode** node = &theList;
do
{
*node = new ListNode;
(*node)->val = sum % 10;
(*node)->next = NULL;
node = &((*node)->next);
sum /= 10;
}
while (sum != 0);
return theList;
}
现场演示
相关文章:
- 将数字转换为字母(例如:123 转换为一二三)
- 将数字转换为单词
- 使用if-else将数字转换为单词
- 将数字转换为填充字符串
- 编译时间文本到数字转换 (atoi)
- 在 c++ 中将数字转换为矢量数组的函数
- 奇怪的数字转换C++
- 用C++将浮点数字转换为本地化字符串
- 如何将ASCII数字转换为从文件中提取的整数
- 检查字符串是否是数字,然后将该数字转换为 int?
- 将 MPFR 数字转换为字符串并返回
- 如何将数字转换为整数向量?
- 如何在C++中将数字转换为链表
- 如何将字符串中的多个数字转换为整数
- 有问题将数字转换为罗马数字
- 这个给定的代码应该将给定的数字转换为尽可能滞后的数字,no.by 用 9.It 替换合适的数字是行不通的
- 将两位数字转换为低内存表示的最快方法
- 视觉 如何将混合的字母和数字转换为仅字母?C++
- 如何在 c++ 中将十六进制数字转换为字符
- 如何将字符串数字转换为各个数字的整数数组