C练题笔记之:Leetcode-2.两数相加

    技术2026-04-22  16

    这道题虽然不难,但是主要第一次碰到了三目的这种用法,所以记下来~

    题目:

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    结果:

    代码:

    /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){ struct ListNode *retNode; struct ListNode *p, *q; int temp = 0; retNode = (struct ListNode*)malloc(sizeof(struct ListNode)); temp = l1->val + l2->val; retNode->val = temp % 10; temp /= 10; retNode->next = NULL; p = retNode; l1 = l1->next; l2 = l2->next; while(l1 || l2) { q = (struct ListNode *)malloc(sizeof(struct ListNode)); l1 = l1 ? (temp += l1->val, l1->next) : l1; l2 = l2 ? (temp += l2->val, l2->next) : l2; q->val = temp % 10; temp /= 10; q->next = p->next; p->next = q; p = q; } if(temp) { q = (struct ListNode *)malloc(sizeof(struct ListNode)); q->val = temp; q->next = p->next; p->next = q; } return retNode; }

     

    Processed: 0.008, SQL: 9