Leetcode在java中添加两个数字?

时间:2015-11-13 02:55:08

标签: java algorithm

Leetcode问题:leetcode.com/problems/add-two-numbers /

  

(参考:Leetcode)您将获得两个代表两个非负数的链表。数字以相反的顺序存储,每个节点包含一个数字。添加两个数字并将其作为链接列表返回。   输入:(2 - > 4 - > 3)+(5 - > 6 - > 4)   输出:7 - > 0 - > 8

我的代码不起作用,但我认为它几乎是正确的。我的代码有什么问题?

  /**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
int m = 0;
        int next=0;
        int recent=0;
        ListNode head = new ListNode(0);
        ListNode temp =head;
        while (l1 != null && l2 != null) {
            if (l1.val + l2.val < 10) {
                m = l1.val + l2.val;
                next=0;
            }else{
                m = (l1.val + l2.val)%10;
                next=1;
            }

            temp.next=new ListNode(m+recent);

            recent=next;
            temp=temp.next;
            l1 = l1.next;
            l2 = l2.next;

        }
        if(l1 != null){
            temp.next=new ListNode(l1.next.val+recent);
        }
        if(l2!= null){
            temp.next=new ListNode(l2.next.val+recent);
        }
        if(recent!=0){
            temp.next=new ListNode(recent);
        }

        System.out.print(head.next.val);
        return head;
    }



}

Leetcode问题:leetcode.com/problems/add-two-numbers /

我的代码不起作用,但我认为它几乎是正确的。我的代码有什么问题?

2 个答案:

答案 0 :(得分:0)

问题是,suppose l1 is shorter than l2 by more than 1,你没有正确地在循环外做其余的事情。

Because you only allocate one more node after you are outside loop.

由于你已经把大部分事情做对了,所以希望注意到这会很快帮助你。

答案 1 :(得分:0)

您的代码问题是

  1. 不完整的代码
  2. 节点值更新错误
  3.   

    当最近= 1,m = 9或l1.next.val = 9时,节点值为10 或   l2.next.val = 9

    1. 当剩余的l1或l2长度至少为2位时,无法在if语句中处理l1或l2
    2.   

      未能处理l1 = 9-> 9-> 9-> 1且l2 = 1

      1. if-statement
      2. 中节点值的使用不正确
          

        为什么忽略 temp.next = new ListNode中的l2.val(l2.next.val + recent);