leetcode刷题第二天<两数相加>
题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
首先是c++
最开始采用官方题解java该c++版本的,代码如下
/**
* 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) {
ListNode* dummyHead = new ListNode(0);
ListNode* p = l1;
ListNode* q = l2;
ListNode* curr = dummyHead;
int carry = 0;
while (p != 0 || q != 0) {
int x = (p != 0) ? p->val : 0;
int y = (q != 0) ? q->val : 0;
int sum = carry + x + y;
carry = sum / 10;
curr->next = new ListNode(sum % 10);
curr = curr->next;
if (p != 0) p = p->next;
if (q != 0) q = q->next;
}
if (carry > 0) {
curr->next = new ListNode(carry);
}
return dummyHead->next;
}
};
思路为申请一个新的链表空间进行存储,然后分别进行链表的传递,接着判断链表的值与0的关系返回,最后求和,然后%10取余数,最后判断余数和和0的关系,然后返回即可
另外一种大佬解法
是申请两个链表的空间,然后如果链表不为空进行遍历相加,最后在判断链表和余数与9的关系,最后返回第二个链表空间。
代码如下
class Solution
{
public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
ListNode* list_head= new ListNode(0); ListNode* list_node=list_head; while(1) {
int sum=list_node->val; if(l1) {
sum+=l1->val;
l1=l1->next;
} if(l2) {
sum+=l2->val;
l2=l2->next;
} list_node->val=sum%10;
if(l1||l2||sum>9) {
list_node->next=new ListNode(sum/10); list_node=list_node->next;
} else{
break;
}
} return list_head;
}
};
最后再用python走下
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
add_num = 0
new_list = ListNode(0)
cur = new_list
cur1 = l1
cur2 = l2
while cur1 or cur2:
if cur1 and cur2:
value = cur1.val + cur2.val + add_num
elif cur1:
value = cur1.val + add_num
elif cur2:
value = cur2.val + add_num cur.next = ListNode(value % 10)
add_num = 0
if value > 9:
add_num = 1
cur = cur.next
if cur1:
cur1 = cur1.next
if cur2:
cur2 = cur2.next
if add_num:
cur.next = ListNode(add_num)
cur = cur.next
return new_list.next
c实现算法如下
int remainder = 0;
int integer = 0;
int sum = 0;
int l1_val = 0;
int l2_val = 0;
struct ListNode *l_end = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *l_head = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *l_node;
struct ListNode *l1_p = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *l2_p = (struct ListNode *)malloc(sizeof(struct ListNode)); l1_p = l1;
l2_p = l2; /*尾插法,当前只有头结点,且为空*/
l_head->next = NULL;
l_end = l_head; while((l1_p != NULL) || (l2_p != NULL))
{ l1_val = (l1_p != NULL)?l1_p->val:0;
l2_val = (l2_p != NULL)?l2_p->val:0;
sum = l1_val + l2_val + integer;
remainder = sum %10; l_node = (struct ListNode *)malloc(sizeof(struct ListNode));
l_node->next = NULL;
l_node->val = remainder;
l_end->next = l_node;
l_end = l_node; if(l1_p != NULL)
{
l1_p = l1_p->next;
} if(l2_p != NULL)
{
l2_p = l2_p->next;
} integer = sum /10; } if(integer > 0)
{
l_node = (struct ListNode *)malloc(sizeof(struct ListNode));
l_node->next = NULL;
l_node->val = integer;
l_end->next = l_node;
l_end = l_node;
} return l_head->next; }
用到了尾插法链接https://blog.csdn.net/lixiaogang_theanswer/article/details/61195907
leetcode刷题第二天<两数相加>的更多相关文章
- 【算法题目】Leetcode算法题思路:两数相加
在LeetCode上刷了一题比较基础的算法题,一开始也能解出来,不过在解题过程中用了比较多的if判断,看起来代码比较差,经过思考和改进把原来的算法优化了. 题目: 给出两个 非空 的链表用来表示两个非 ...
- #leetcode刷题之路2-两数相加
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- leetcode刷题笔记-1. 两数之和(java实现)
题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不能使 ...
- LeetCode 刷题笔记 1. 两数之和(Two Sum)
tag: 栈(stack) 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案. ...
- (1)leetcode刷题Python笔记——两数之和
题目如下: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...
- leetcode刷题第一日<两数和问题>
开始就用到了c++的哈希表是真的恶心,首先学习一波基础知识 https://blog.csdn.net/u010025211/article/details/46653519 下面放下大佬的代码 cl ...
- LeetCode(2): 两数相加
本内容为LeetCode第二道题目:两数相加 # -*- coding: utf-8 -*- """ Created on Sun Mar 10 10:47:12 201 ...
- [LeetCode]2.Add Two Numbers 两数相加(Java)
原题地址: add-two-numbers 题目描述: 给你两个非空的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字. 请你将两个数相加,并以相同形式返回 ...
- 【LeetCode】Add Two Numbers(两数相加)
这道题是LeetCode里的第2道题. 题目要求: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将 ...
随机推荐
- vue实战记录(一)- vue实现购物车功能之前提准备
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(一) GitHub:sue ...
- Wannafly挑战赛23 T2游戏 SG函数
哎,被卡科技了,想了三个小时,最后还是大佬给我说是\(SG\)函数. \(SG\)函数,用起来很简单,证明呢?(不可能的,这辈子都是不可能的) \(SG\)定理 游戏的\(SG\)函数就是各个子游戏的 ...
- MS SQL Server 数据库连接字符串详解
MS SQL Server 数据库连接字符串详解 原地址:http://blog.csdn.net/jhhja/article/details/6096565 问题 : 超时时间已到.在从池中获取连接 ...
- DirectX11 With Windows SDK--07 添加光照与常用几何模型
前言 对于3D游戏来说,合理的光照可以让游戏显得更加真实.接下来会介绍光照的各种分量,以及常见的光照模型.除此之外,该项目还用到了多个常量缓冲区,因此还会提及HLSL的常量缓冲区打包规则以及如何设置多 ...
- 第三节:ThreadPool的线程开启、线程等待、线程池的设置、定时功能
一. ThreadPool简介 ThreadPool简介:ThreadPool是一个线程池,当你需要开启n个线程时候,只需把这个指令抛给线程池,它将自动分配线程进行处理,它诞生于.Net 2.0时代. ...
- 理解 Web 中的Session
===================================Session 工作原理是什么?===================================因为 http 协议是无状态 ...
- JS转换HTML转义符,编码及解码
JS转换HTML转义符 //去掉html标签 function removeHtmlTab(tab) { return tab.replace(/<[^<>]+?>/g,'') ...
- [物理学与PDEs]第1章习题9 磁偶极矩的极限矢势
设在发现为 ${\bf n}$ 的平面上, 有一电流强度为 $I$ 的环形电流, 其方向与 ${\bf n}$ 成右手系. 又设该环形电流所围的面积为 $S_0$, 则 $$\bex {\bf m}= ...
- [物理学与PDEs]第1章习题3 常场强下电势的定解问题
在一场强为 ${\bf E}_0$ (${\bf E}_0$ 为常向量) 的电场中, 置入一个半径为 $R$ 的导电球体, 试导出球外电势所满足的方程及相应的定解条件. 解答: 设导电球体为 $B_R ...
- Blender 2.78 突然卡顿
之前一直好好的直到这两天打开就一直延迟半拍,重启重装无效. 解决方法: NVIDIA控制面板→管理3d设置→程序设置→选择blender,更改显卡为集成显卡→应用 亲测有效.