leetCode_2.两数相加
Posted 大黄宝宝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetCode_2.两数相加相关的知识,希望对你有一定的参考价值。
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
思路:我开始想到了两种方法
遍历两个链表,然后取值相加存入一个新的链表,就是在模拟数学中逐位相加的过程。
把链表转成数值相加,然后再转回链表。
后来细想链表可以无限长,得用大数值处理很不方便,所以还是考虑用第一种方法。
第一种的解法:
这个题目不是很难,熟悉链表结构就行了,说一下注意的几点应该就能理解了。
考虑几个特殊情况: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.两数相加的主要内容,如果未能解决你的问题,请参考以下文章