java add two numbers_jiler的LeetCode学习笔记 java版本 Add Two Numbers

问题描述:You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)

Output: 7 -> 0 -> 8

其实我发现,对于我来说,读懂题目就是问题所在:给你两个linked lists,代表两个倒序(如数字1234,给你的形式是4->3->2->1这样的序列)的数,让他们相加,结果也是返回一个linked lists。

问题是  进位和不同长度的两个数字相加。下面是我的代码,不当之处多多批评:

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

//num1用来接收第一个list1的值。

//num2用来接收第二个list2的值。

//l3用来指向最终的list头结点

//l4用来修改list的next指针

//flag是判断进位标志

int num1 = l1.val;

int num2 = l2.val;

ListNode l3 = new ListNode((num1+num2)%10);

ListNode l4 = l3;

ListNode l;

int flag = 0;

//首先,判断是否进位

if (num1+num2>9) {

flag = 1;

}

//两个list都没有到达结尾

while(l1.next != null && l2.next != null){

//新建节点

l = new ListNode(0);

//l4的next指向节点

l4.next = l;

//l4指向节点

l4 = l;

//如果需要进位,在此加一,并把flag归位。

if (flag == 1) {

l.val =1;

flag = 0;

}

//l1和l2分别取下一个数据

l1 = l1.next;

l2 = l2.next;

num1 = l1.val;

num2 = l2.val;

//判断是否需要进位

if (l.val + num1+num2>9) {

flag = 1;

}

//赋值

l.val = (l.val + num1+num2)%10;

}

//如果同时到了结尾

if(l1.next == null && l2.next == null){

//需要进位,新建node,赋值,结束。

if (flag == 1) {

l = new ListNode(1);

l4.next = l;

}

return l3;

}

//l2到了结尾,l1还要继续

if(l1.next != null){

//新建节点,处理节点,处理进位

l = new ListNode(0);

l4.next = l;

l4 = l;

if (flag == 1) {

l.val =1;

flag = 0;

}

//取l1的下一个数据

l1 = l1.next;

num1 = l1.val;

//判断是否进位

if ((l.val + num1)> 9) {

flag = 1;

}

//赋值

l.val = (l.val + num1)%10;

//处理剩下的节点

while (l1.next != null) {

l = new ListNode(0);

l4.next = l;

l4 = l;

if (flag == 1) {

l.val =1;

flag = 0;

}

l1 = l1.next;

num1 = l1.val;

if ((l.val + num1)> 9) {

flag = 1;

}

l.val = (l.val + num1)%10;

}

//所有节点处理完毕,判断是否进位

if (flag == 1) {

l = new ListNode(0);

l4.next = l;

l.val =1;

}

//返回结果

return l3;

}

//l1到达结尾,l2需要处理,同理,不再做解释

if(l2.next != null){

l = new ListNode(0);

l4.next = l;

l4 = l;

if (flag == 1) {

l.val =1;

flag = 0;

}

l2 = l2.next;

num2 = l2.val;

if ((l.val + num2)> 9) {

flag = 1;

}

l.val = (l.val + num2)%10;

while (l2.next != null) {

l = new ListNode(0);

l4.next = l;

l4 = l;

if (flag == 1) {

l.val =1;

flag = 0;

}

l2 = l2.next;

num2 = l2.val;

if ((l.val + num2)> 9) {

flag = 1;

}

l.val = (l.val + num2)%10;

}

if (flag == 1) {

l = new ListNode(0);

l4.next = l;

l.val =1;

}

}

return l3;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值