【看懂LeetCode】2.两数相加
LeetCode 相加 两数
2023-09-11 14:18:28 时间
一、绪
二、两数相加
链接: 两数相加.
(一)题目描述
解释:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
输入:l1 = [2,4,3], l2 = [5,6]
输出:[7,0,4]
解释:342 + 65 = 407.
输入:l1 = [9,9,9], l2 = [1,1]
输出:[0,1,0,1]
解释:999 + 11 = 1010.
解题思路:
//1.先定义一个结果链表,初始化后,定义一个链表节点p,去遍历结果链表
//2.定义链表节点*p1、*p2去分别遍历两个链表,将两个链表对应地逐个节点值相加
//问题:如果链表中其中一个链表提前遍历到尾端,怎么办?
//应对方法:定义整型v1、v2去接收节点值,当链表走到尾端时,则节点为空,此时对应的v1或v2则赋值为0
//定义一个进位值jinWei,若两个节点值之和大于10,jinWei=1,否则等于0
//3.当两个链表都遍历完成后,判断最后一位有无进位,有则将结果链表最后一位进行赋值,无则将最后一位设为空。
//注意:不能直接将最后一个节点赋为NULL,因为末节点的前一个节点(pre)的next指针依旧指着末节点,必须将末节点(pre)的前一个节点的next指针赋为NULL才可。
//4.相加结束后,将结果链表return
(二)AC代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
//1.先定义一个结果链表,初始化后,定义一个链表节点p,去遍历结果链表
struct ListNode *result,*p;
result = p = (struct ListNode*)malloc(sizeof(struct ListNode));
result->next = NULL;
p=result;
//2.定义链表节点*p1、*p2去分别遍历两个链表,将两个链表对应地逐个节点值相加
//问题:如果链表中其中一个链表提前遍历到尾端,怎么办?
//应对方法:定义整型v1、v2去接收节点值,当链表走到尾端时,则节点为空,此时对应的v1或v2则赋值为0
//定义一个进位值jinWei,若两个节点值之和大于10,jinWei=1,否则等于0。初始为0
struct ListNode *p1,*p2,*pre;
int v1,v2,sum,jinWei=0;
p1 = p2 = pre = (struct ListNode*)malloc(sizeof(struct ListNode));
p1 = l1;
p2 = l2;
while(p1||p2){
//获取两个链表的节点值
if(p1) v1 = p1->val;
else v1 = 0;
if(p2) v2 = p2->val;
else v2 = 0;
//开始相加,并处理进位问题
sum = v1+v2+jinWei; //要记得加进位值
if(sum>=10){ //若相加和大于10,则进位
sum -= 10;
jinWei = 1;
}
else{ //否则无
jinWei = 0;
}
p->val = sum; //给结果链表节点赋值
//往结果链表下一位遍历
//注意,如果两条相加的链表均遍历到了最后一位,这里最后会留下一个末尾空结点,需要在循环外作处理,或则放最后一位的进位,或设为NULL
p->next = (struct ListNode*)malloc(sizeof(struct ListNode));
pre = p;
p = p->next;
p->next = NULL;
//往两条链表的下一位遍历
if(p1) p1=p1->next;
if(p2) p2=p2->next;
}
//判断最后一位有无进位,有则对最后一位进行赋值,无则把上面末尾剩余的一个空结点的前一个节点的next指针设为NULL
if(jinWei==1){
p->val = jinWei;
}
else pre->next = NULL;
return result;
}
相关文章
- Java实现 LeetCode 813 最大平均值和的分组 (DFS+DP记忆化搜索)
- Java实现 LeetCode 762 二进制表示中质数个计算置位(位运算+JDK的方法)
- Java实现 LeetCode 501 二叉搜索树中的众数
- Java实现 LeetCode 454 四数相加 II
- Java实现 LeetCode 440 字典序的第K小数字
- Java实现 LeetCode 415 字符串相加
- Java实现 LeetCode 391 完美矩形
- Java实现 LeetCode 258 各位相加
- Java实现 LeetCode 204 计数质数
- Java实现 LeetCode 174 地下城游戏
- LeetCode(8):字符串转整数(atoi)
- LeetCode(46):全排列
- LeetCode-1805. 字符串中不同整数的数目【哈希表,字符串】
- LeetCode-769. 最多能完成排序的块【贪心,一次遍历,单调栈,排序】
- 【LeetCode 2】两数相加
- 【LeetCode 中等 数学 python3】剑指 Offer 43. 1~n整数中1出现的次数
- 【LeetCode 中等 链表 python3】2. 两数相加
- Leetcode 258. 各位相加
- Leetcode 四数相加 II
- leetcode 415. 字符串相加 js 实现
- LeetCode:Populating Next Right Pointers in Each Node
- LeetCode——Symmetric Tree
- leetcode 206. Reverse Linked List
- 【Leetcode刷题Python】15. 三数之和
- 【LeetCode】56. 合并区间
- 【2】两数相加 【LeetCode】