LeetCode | Add Two Numbers

来源:互联网 发布:linux安装windows字体 编辑:程序博客网 时间:2024/05/02 16:49

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

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */

 //整理思路与昨天的add binary非常类似,程序结构也一样 //注意此处list是倒序存储数字的,即低位在左,高位在右 //故只需要正向遍历相加,并维护进位即可public class Solution {    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {if(l1 == null) return l2;if(l2 == null) return l1;ListNode cur_1 = l1;ListNode cur_2 = l2;ListNode head = new ListNode(0);   //返回head.next,避免了在循环中加额外判断ListNode cur  = head;              //用作指针int carry = 0;                     //进位while(cur_1!=null && cur_2!=null){int sum = cur_1.val + cur_2.val + carry;int digit = sum % 10;carry = sum / 10;ListNode newNode = new ListNode(digit);cur.next = newNode;cur = cur.next;cur_1 = cur_1.next;cur_2 = cur_2.next;}while(cur_1 != null){              //当list 1还有剩余节点int sum = cur_1.val + carry;int digit = sum % 10;carry = sum / 10;ListNode newNode = new ListNode(digit);cur.next = newNode;cur = cur.next;cur_1 = cur_1.next;}while(cur_2 != null){             //当list 2还有剩余节点int sum = cur_2.val + carry;int digit = sum % 10;carry = sum / 10;ListNode newNode = new ListNode(digit);cur.next = newNode;cur = cur.next;cur_2 = cur_2.next;}if(carry > 0){                   //容易忽略的错误:最高位仍有进位时,要额外新增一位ListNode newNode = new ListNode(carry);cur.next = newNode;}return head.next;            }}


0 0
原创粉丝点击