从末尾添加两个链接列表[DUPLICATE]

时间:2018-01-23 09:36:15

标签: java data-structures linked-list singly-linked-list

我有两个链表,每个节点包含一个数字。数字的顺序相反,因此1的数字位于列表的开头。我必须编写一个函数,将两个数字相加并返回总和。 我已经在互联网上看到了很多解决方案并提出了我自己的解决方案。我想知道使用StringBuilder将数字转换为字符串是一种有效的方法。

public int addlists(Node head,Node head2) {
    int sum = 0;
    Node n = head;
    Node n2 = head2;
    StringBuilder s = new StringBuilder();
    StringBuilder s2 = new StringBuilder();
    while(n!=null) {
        s.append(n.data);
        n = n.next;
    }

    while(n2!=null) {
        s2.append(n2.data);
         n2 = n2.next;
    }

    s.reverse(); s2.reverse();

    sum = Integer.parseInt(s.toString()) + Integer.parseInt(s2.toString());
    System.out.println(sum);
    return sum;
}

1 个答案:

答案 0 :(得分:0)

您不需要使用StringBuilder,您可以使用简单的数学运算,只需跟踪生成的carry,并将10位乘以10和100 #39;使用Math.pow

放置100
public int addTwoLists(Node first, Node second) {
    int carry=0,sum=0,k=0;

    while (first != null || second != null){

        sum = sum + ((carry+(first!=null?first.data:0)+(second!=null?second.data:0))%10) * ((int)(Math.pow(10,k)));

        carry=(carry+(first!=null?first.data:0)+(second!=null?second.data:0)>=10)?1:0;

        k++;
        if (first != null) { first = first.next; }
        if (second != null) { second = second.next; }
    }
    return sum;
}