[LeetCode T2(c语言)] Add Two Numbers
程序员文章站
2022-04-06 15:30:06
...
题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
解题思路
一、第一步仔细读题目,两个无符号整数相加,整数用链表表示,所以这两个整数位数很多。因此不
能直接相加,否则可能会溢出。
二、整数用链表表示,所以可以模拟加法操作进行一位一位相加,当和大于或等于10时,个位留在链表当前位置,并在链表下一位置加一。
三、两个链表可能不一样长,所以要进行判断哪个链表先达到尾部。共有三种情况:
1、两个链表同时到达尾部。此时判断上次相加是不是有进位,若有的话还需扩展链表。否则直接返回即可;
2、第一个链表先到达尾部。
3、第二个链表先到达尾部。
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *h, *p, *q; int a = 0, b = 0, temp = 0;
h = p = (struct ListNode*)malloc(sizeof(struct ListNode));
h->next = NULL;
while(l1 && l2){
q = (struct ListNode*)malloc(sizeof(struct ListNode));
a = l1->val + l2->val + b;
if(a >= 10){
a = a % 10;
b = 1;
}
else b = 0;
q->val = a;
q->next = NULL;
p->next = q;
p = q;
l1 = l1->next;
l2 = l2->next;
}
if((l1 == NULL)&&(l2 == NULL)){
if(b == 0) return h->next;
else{
q = (struct ListNode*)malloc(sizeof(struct ListNode));
q->val = b;
q->next = NULL;
p->next = q;
p = q;
return h->next;
}
}
else if(l1 == NULL){
while(l2){
q = (struct ListNode*)malloc(sizeof(struct ListNode));
a = l2->val + b;
if(a >= 10){
a = a % 10;
b = 1;
}
else b = 0;
q->val = a;
q->next = NULL;
p->next = q;
p = q;
l2 = l2->next;
}
}
else{
while(l1){
q = (struct ListNode*)malloc(sizeof(struct ListNode));
a = l1->val + b;
if(a >= 10){
a = a % 10;
b = 1;
}
else b = 0;
q->val = a;
q->next = NULL;
p->next = q;
p = q;
l1 = l1->next;
}
}
if(b == 1){
q = (struct ListNode*)malloc(sizeof(struct ListNode));
q->val = b;
q->next = NULL;
p->next = q;
p = q;
}
return h->next;
}
推荐阅读
-
leetcode 2. Add Two Numbers
-
Leetcode--Add Two Numbers(0002)
-
Leetcode 2. Add Two Numbers (java)
-
leetcode 349. Intersection of Two Arrays(C语言)10
-
LeetCode 2: Add Two Numbers题解(Python)
-
【Leetcode&C语言&Tire】208.Implement Trie (Prefix Tree) & 211.Design Add and Search Words Data Structure
-
Leetcode--Add Two Numbers(0002)
-
leetcode 2. Add Two Numbers
-
【小白爬Leetcode2】1.10 两数相加Add Two Numbers
-
Leetcode 2. Add Two Numbers (java)