leetcode add two numbers

leetcode add two numbers

本题关于singly-linked list 单链表
链表是怎么链接在一起的??怎么存储的??

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
ListNode *Solution::addTwoNumbers(ListNode *l1, ListNode *l2)
{
ListNode *answer = nullptr;
ListNode **curr = &answer; //指向指针的指针,一种间接寻址方式
//将answer的地址赋给curr,(64位)
ListNode *addr1 = l1;
ListNode *addr2 = l2;
int carry = 0;
int sum = 0;

while (addr1 != nullptr || addr2 != nullptr ||carry>0) //do not use for()
{
if (addr1!=nullptr)
{
sum+=addr1->val;
addr1=addr1->next;
}
if (addr2!=nullptr)
{
sum+=addr2->val;
addr2=addr2->next;
}
sum+=carry;
carry = sum / 10;
(*curr) = new ListNode(sum % 10); //每次新建一个node,不用取名
//*curr 取得是curr地址中的64位内容,**curr 就要取两次地址中的内容
//这是变量,这是把新建node的地址赋给answer,填满64位
//https://www.runoob.com/cplusplus/cpp-pointer-to-pointer.html
curr = &((*curr)->next); //把next本身的地址赋给curr
//-> 相当于 *,跳转 取内容
sum=0;
}
return answer;
}

解决方法:每次新建一个,匿名新建


ListNode *curr = nullptr; //指向指针的指针,一种间接寻址方式
ListNode *answer = curr;

这样赋值后,answer得到是nullptr

ListNode *answer = nullptr;
ListNode **curr = &answer; //指向指针的指针,一种间接寻址方式

这样赋值后,curr得到是answer本身的地址,而不是内容