gpt4 book ai didi

c++ - 在链表中添加两个数字

转载 作者:行者123 更新时间:2023-11-27 22:44:28 24 4
gpt4 key购买 nike

我正在尝试将两个链表中的数字相加并将其放入第三个链表中。它添加得很好,但我的代码阻止编译器在运行此代码时停止响应,可能是因为无限循环或某些异常。

以下代码将两个以相反顺序存储在链表中的数字相加。

struct Node{
int x;
Node* next;
};

class LinkedList{

public:
Node* head;
LinkedList(){
head = NULL;
}

void addNode(int num){
Node* n = new Node();
n->x = num;
n->next = NULL;
if(head == NULL){
head = n;
}else{
Node* n1 = head;
while(n1 != NULL){
if(n1->next == NULL){
n1->next = n;
break;
}
n1 = n1->next;
}
}
}

int popNode(){
int num = NULL;
if (head != NULL){
num = head->x;
head = head->next;
}else{
cout << "Yay" << "\n";
num = NULL;
}

return num;
}

void printList(){
Node* n1 = head;
while(n1 != NULL){
if(n1->next == NULL){
cout << n1->x << "\n";
}else{
cout << n1->x << "->";
}

n1 = n1->next;
}
}

};

LinkedList* add_nums(LinkedList* l1, LinkedList* l2) {
LinkedList l3;

int num1= (*l1).popNode();
int num2= (*l2).popNode();
int carry = 0;

while(num1 != NULL || num2 != NULL){
int num3 = num1+num2+carry;

if (num3 > 9){
int temp = num3 % 10;
carry = (num3 - temp)/10;
num3 = temp;
}

l3.addNode(num3);
l3.printList();
num1 = (*l1).popNode();
num2 = (*l2).popNode();
}

return &l3;

}



int main(int argc, char const *argv[]) {
LinkedList list1;
LinkedList list2;
list1.addNode(2);
list1.addNode(4);
list1.addNode(3);
list2.addNode(5);
list2.addNode(6);
list2.addNode(4);
(*(add_nums(&list1, &list2))).printList();
return 0;
}

谁能告诉我我做错了什么?

在输入以下答案后我应该对代码进行更改:

  1. 我应该将整数初始化从 NULL 更改为 0。
  2. 应该使用 LinkedList 对象来终止我的循环。
  3. 应该改变我从指针访问函数的方式

谢谢大家

最佳答案

Can anyone tell me what I'm doing wrong?

  1. 恕我直言,您可能做出了错误的选择。 STL 为(双向链接)list 提供数据结构和 forward list (这是单链接)。也许你想使用那些。如果您想成为一名熟练的 C++ 程序员,您可以期望它们足够高效、无错误并且了解它们很重要。
  2. 让某人进行代码审查是有意义的(有一个代码审查 StackExchange 站点);例如在链表中命名整数变量 x 可能不是一个好习惯。
  3. 你没有告诉我们你的程序有什么问题。这在 SO 中是预期的。您的问题符合“题外话(为什么这段代码不起作用?)”。你提供了程序,这很好。但是您没有提供预期的输入和输出。你的程序期望做什么?如果我将您的 main 函数视为测试,那么您期望得到什么结果?
  4. 查看下面的一些错误/警告

在函数popNode

int num = NULL; // should be 0, it's an integer
...
num = NULL; // same reason

在函数 add_nums

LinkedList l3; // it's a local variable (see return below)
...
while(num1 != NULL || num2 != NULL) // again num1 and num2 are integers
....
return &l3; // address of a local variable :-(

我认为你最好将变量 l3 声明为指向 LinkedList 的指针:

LinkedList *l3 = new LinkedList;
... // adapt the code to use l3 appropriately
return l3;

关于c++ - 在链表中添加两个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44956243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com