Leetcode刷题100天—2. 两数相加( 链表)—day60

Posted 神的孩子都在歌唱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—2. 两数相加( 链表)—day60相关的知识,希望对你有一定的参考价值。

前言:

作者:神的孩子在歌唱

大家好,我叫智

2. 两数相加

难度中等6851收藏分享切换为英文接收动态反馈

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

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

示例 1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

提示:

  • 每个链表中的节点数在范围 [1, 100]
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零
package 链表;
/*
 * https://leetcode-cn.com/problems/add-two-numbers/
 * 我的问题:这道题我用了太多if和else,看了官方题解发现还可以简化,后面再慢慢分析,不过思路差不多
 * 1. 如果两个链表不为空就相加遍历,如果相加有进制就存在carry里面让后面节点加上就可以了
 * 2. 如果一个链表遍历完了那就遍历另一个链表,也得要判断carry是否为1
 */
public class _2_两数相加 
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) 
//    	定义一个新的节点
    	ListNode res=new ListNode(0);
    	ListNode pivot=res;
//    	定义进位数不是0就是1
    	int  carry=0;
//    	他们两个相加的值
    	int val=0;
//    	通过while循环遍历,直到l1或l2都为空
    	while(l1!=null||l2!=null) 
    		
//    		如果l1为空,那么只遍历l2
    		if (l1==null) 
        		if (carry==1) 
            		val=l2.val+1;
            		carry=0;
    			else 
    				val=l2.val;
    			
//        		如果val大于等于10,说明进制
        		if (val>=10) 
        			pivot.next=new ListNode(val%10);
    				carry=1;
    			else 
    				pivot.next=new ListNode(val);
    			
        		pivot=pivot.next;
				l2=l2.next;
				continue;
			
//    		如果l2为空,那么只遍历l1
    		if (l2==null) 
        		if (carry==1) 
            		val=l1.val+1;
            		carry=0;
    			else 
    				val=l1.val;
    			
//        		如果val大于等于10,说明进制
        		if (val>=10) 
        			pivot.next=new ListNode(val%10);
    				carry=1;
    			else 
    				pivot.next=new ListNode(val);
    			
        		pivot=pivot.next;
				l1=l1.next;
				continue;
			
//    		如果两个都不为空,就相加
//    		val=l1.val+l2.val;
//    		然后判断carry是否是1,是1就加1,和val是否大于10,大于就%10
    		if (carry==1) 
        		val=l1.val+l2.val+1;
        		carry=0;
			else 
				val=l1.val+l2.val;
			
//    		如果val大于等于10,说明进制
    		if (val>=10) 
    			pivot.next=new ListNode(val%10);
				carry=1;
			else 
				pivot.next=new ListNode(val);
			
//    		在往下移
    		pivot=pivot.next;
    		l1=l1.next;
    		l2=l2.next;
    	
    	if (carry==1) 
    		pivot.next=new ListNode(1);
		
    	return res;
    

本人csdn博客:https://blog.csdn.net/weixin_46654114

转载说明:跟我说明,务必注明来源,附带本人博客连接。

以上是关于Leetcode刷题100天—2. 两数相加( 链表)—day60的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—167. 两数之和 II - 输入有序数组(双指针)—day20

Leetcode刷题100天—167. 两数之和 II - 输入有序数组(双指针)—day20

LeetCode Java刷题笔记—445. 两数相加 II

LeetCode第2天 - 2. 两数相加

LeetCode Java刷题笔记—2. 两数相加

LeetCode刷题笔记-数据结构-day10