https://leetcode.cn/problems/add-two-numbers/?envType=study-plan-v2&envId=top-100-liked
对于本题,可以选择用数组实现,那样比较简单;我们这里就用纯链表实现。
纯链表实现有许多细节,比如链表长度不一样,进位,尾结点如果是0我们就要删除尾结点。
首先创建新链表
//开辟新链表struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));head->next = NULL, head->val = 0;//用tmp去将两个链表相加struct ListNode* tmp = head;
由于需要考虑进位,我们这里想到的是,假想还有一个新链表,链表长度比l1和l2中长的链表再长一个结点,这个新链表全部初始化为0,用来记录进位。
这是假想,实质上是每次相加前,开辟一个新结点,用来记录进位,这个新结点就是tmp的next,每次计算完,tmp就变到tmp的next,即每一次的res = l1->val + l2->val + tmp->val;
同时相加过程中要注意这两个链表是否走完,这里需要注意的是,