力扣刷题:两数相加https://leetcode.cn/problems/add-two-numbers/
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
测试用例:
输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.
题解:
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode * head = (struct ListNode*)malloc(sizeof(struct ListNode));
if(head==NULL)
{
perror("malloc");
return NULL;
}
struct ListNode * tail = head; //尾指针指向头指针,实现将原本的链表逆序
int carry = 0; //进位
while(l1 || l2 || carry)
{
if(l1)
{
carry += l1->val;
l1 = l1->next;
}
if(l2)
{
carry += l2->val;
l2 = l2->next;
}
//carry = carry+l1->val+v2->val
//为新链表申请内存
tail->next = (struct ListNode*)malloc(sizeof(struct ListNode));
tail->next->val = carry%10; //赋值
tail->next->next = NULL; //将下一结点指向的地址内容置空
tail = tail->next; //遍历到下一结点
carry/=10; //为下一节点的进位数值
}
return head->next; //返回除头结点的整条链表
}