【leetcode系列】02.05-链表求和

两个链表相加

给定两个用链表表示的整数,每个节点包含一个数位。

这些数位是反向存放的,也就是个位排在链表首部。

输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912

思路:

两个链表中,只要任意一个链表还有值,就需要一直求和
如果两个链表等长还好,如果一个长一个短

5 -> 9 -> 1
5

对于这种,短的链表都加完后,可以补0继续与长的链表进行相加。直到长的链表也全加完

public class AddNode {
    public static void main(String[] args) {
        // 个位排在链表首部
        ListNode root1 = new ListNode(7);
        ListNode n1 = new ListNode(1);
        ListNode n2 = new ListNode(8);
        ListNode n9 = new ListNode(9);

        root1.next = n1;
        n1.next = n2;
        n2.next = n9;

        ListNode root2 = new ListNode(5);
        ListNode n3 = new ListNode(9);
        ListNode n4 = new ListNode(2);
        root2.next = n3;
        n3.next = n4;

        ListNode result = addNode(root1, root2);
        System.out.println(result);
    }
    private static ListNode addNode(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(0);
        ListNode l1Temp = l1;
        ListNode l2Temp = l2;
        ListNode temp = head;

        // 进位
        int remainder = 0;
        while (l1Temp != null || l2Temp != null){
            int x = l1Temp == null ? 0 : l1Temp.val;
            int y = l2Temp == null ? 0 : l2Temp.val;
            int sum = x + y + remainder;
            temp.next = new ListNode(sum % 10);
            temp = temp.next;

            remainder = sum / 10;

            // 如果当前节点已为null,则下一个节点也为null,否则正常 _ = _.next
            l1Temp = l1Temp == null ? null : l1Temp.next;
            l2Temp = l2Temp == null ? null : l2Temp.next;
        }

        // 此时,l1和l2均已全部加完。只需要再看一下进位是否还剩个1
        if (remainder == 1){
            temp.next = new ListNode(1);
        }
        return head.next;
    }
}

你可能感兴趣的:(链表求和,leetcode02.05)