题解 | #链表相加(二)#

链表相加(二)

https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b

public class Solution {
    /**
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */
    public ListNode addInList (ListNode head1, ListNode head2) {
        // write code here
        StringBuffer sb1 = new StringBuffer();
        StringBuffer sb2 = new StringBuffer();
        while (head1 != null) {
            sb1.append(head1.val);
            head1 = head1.next;
        }
        while (head2 != null) {
            sb2.append(head2.val);
            head2 = head2.next;
        }
        String res = strAdd(sb1.toString(), sb2.toString());
        ListNode root = new ListNode((int) (res.charAt(0) -  '0'));
        ListNode cur = root;
        for (int i = 1; i < res.length(); i++) {
            cur.next = new ListNode((int) (res.charAt(i) - '0'));
            cur = cur.next;
        }
        return root;
    }

    public String strAdd(String s1, String s2) {
        StringBuffer sb = new StringBuffer();

        // 补全 让s1 s2等长
        int lenA = s1.length(), lenB = s2.length();
        StringBuffer sb1 = new StringBuffer();
        StringBuffer sb2 = new StringBuffer();
        
        for (int i = 0; i < Math.abs(lenA - lenB); i++) {
            if (lenA < lenB) sb1.append(0);
            else sb2.append(0);
        }
        sb1.append(s1);
        sb2.append(s2);
        s1 = sb1.toString();
        s2 = sb2.toString();

        //System.out.println(s1 + " + " + s2);
        int cnt = 0;
        for (int i = Math.max(lenA, lenB) - 1; i >= 0; i--) {
            char c1 = s1.charAt(i), c2 = s2.charAt(i);
            int sum = c1 - '0' + c2 - '0' + cnt;
            if (sum < 10) {
                sb.append(sum);
                cnt = 0;
            } else {
                sb.append(sum % 10);
                cnt = sum / 10;
            }
        }
        if (cnt != 0) sb.append(cnt);
        return sb.reverse().toString();
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务