我是靠谱客的博主 刻苦棉花糖,最近开发中收集的这篇文章主要介绍【Leetcode】面试题 02.05. 链表求和【Leetcode】面试题 02.05. 链表求和,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
【Leetcode】面试题 02.05. 链表求和
题目
给定两个用链表表示的整数,每个节点包含一个数位。
这些数位是反向存放的,也就是个位排在链表首部。
编写函数对这两个整数求和,并用链表形式返回结果。
思路
利用进位制加法的原则,循环遍历两个链表,注意循环条件不是两个链表不为空,还要加上进位标志不为0
代码
/**
* Definition for singly-linked list.
* struct ListNode {
*
int val;
*
ListNode *next;
*
ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int sum1 = 0;
int sum2 = 0;
int carry = 0;// 进位
ListNode *l3 = new ListNode(0);
ListNode *p = l3;// 利用进位加法
int sum = 0;
// 循环条件加上 carry != 0
因为比如l1 = 5 l2 =5 这样经过一轮循环 两个链表都是空 但是进位还有添加 所以进位不为空 也是循环条件一部分
while(l1 != NULL || l2 != NULL || carry != 0)
{
sum1 = 0;
sum2 = 0;
sum = 0;
if(l1 != NULL)
{
sum1 += l1->val;
l1 = l1->next;
}
if(l2 != NULL)
{
sum2 += l2->val;
l2 = l2->next;
}
sum = sum1 + sum2 + carry;// 加上进位标志
// 计算进位标志
carry = sum / 10;
// 新建一个节点 存储结算结果
然后插入新建的链表中
int s = sum % 10;
ListNode *tmp = new ListNode(s);
p->next = tmp;
p = p->next;
}
return l3->next;
}
};
最后
以上就是刻苦棉花糖为你收集整理的【Leetcode】面试题 02.05. 链表求和【Leetcode】面试题 02.05. 链表求和的全部内容,希望文章能够帮你解决【Leetcode】面试题 02.05. 链表求和【Leetcode】面试题 02.05. 链表求和所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复