leetCode_2.两数相加

Posted 大黄宝宝

tags:

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

题目内容: 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

思路:我开始想到了两种方法

  1. 遍历两个链表,然后取值相加存入一个新的链表,就是在模拟数学中逐位相加的过程。

  2. 把链表转成数值相加,然后再转回链表。

后来细想链表可以无限长,得用大数值处理很不方便,所以还是考虑用第一种方法。

第一种的解法:

这个题目不是很难,熟悉链表结构就行了,说一下注意的几点应该就能理解了。

考虑几个特殊情况:1.链表为空

                               2.链表长度不同的

                               3.最后求和进位

注意:要预先设置一个节点指向第一次相加后的首节点。防止首节点丢失,不然咋返回链表呢。


代码:



/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) {  ListNode newNode=new ListNode(0); int y=0; int z=0; ListNode rsNode=newNode; while(l1!=null || l2!=null){ int val1= l1==null?0:l1.val; int val2= l2==null?0:l2.val; y=(val1+val2+z)%10;  rsNode.next=new ListNode(y); z=(val1+val2+z)/10;  if(l1!=null) l1=l1.next; if(l2!=null) l2=l2.next; rsNode=rsNode.next; } if(z>0){ rsNode.next=new ListNode(1);  } return newNode.next; }
}



以上是关于leetCode_2.两数相加的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-2. 两数相加

LeetCode 2.两数相加

leetcode 2 两数相加

LeetCode第2天 - 2. 两数相加

leetcode 算法题2 两数相加

leetcode_数据结构_链表_445两数相加二(STL库stack栈的使用)