LeetCode第二题:两树相加(C语言)

xiaoxiao2025-11-04  5

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

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

示例:

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


对于这道题,正常情况下都可以考虑到,但会出现一些特殊情况:

输入:(1 ) + (9 -> 9 -> 9) 输出:0 -> 0 -> 0 -> 1输入:(2 -> 4 ) + (8 ->5) 输出:0 -> 0 -> 1

代码变量含义:

flag:进位标志位;两数相加大于10 flag = 1;否则flag= 0;l3:指向新链表的某个结点cur:指向新链表的头结点 //生成结点 struct ListNode *CreateNode(int val) { struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode)); node->val = val; node->next = NULL; return node; } struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { int flag = 0; struct ListNode* cur = NULL; struct ListNode* l3 = NULL; while (l1 || l2) { int x = l1 ? l1->val : 0; int y = l2 ? l2->val : 0; int sum = x + y + flag; flag = sum / 10; struct ListNode* node = CreateNode(sum % 10); if (l3) {l3->next = node; l3 = l3->next;} else {l3 = node; cur = node;} if (l1) l1 = l1->next; if (l2) l2 = l2->next; } //下面就是考虑到了上述的特殊情况 if (flag == 1) { struct ListNode* node = CreateNode(1); l3->next = node; } return cur; }
转载请注明原文地址: https://www.6miu.com/read-5039081.html

最新回复(0)