2-两数相加

        给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。如输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] 输出:[8,9,9,9,0,0,0,1]。

        解题过程中需要注意两点:1.进位,如果两数相加,则进1;2.如果有一个链表先遍历结束之后持续遍历的问题。

package leecodeOff;
/*
 * 02.两数相加
 */
public class Demo02 {
    
	public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		if (l1 == null || l2==null) {
			return l2==null?l1:l2;
		}
		ListNode head = null,tail = null;
		int carry = 0,temp_l1 = 0,temp_l2 = 0;
        while(l1!=null || l2!=null) {
        	temp_l1 = l1!=null?l1.val:0;
        	temp_l2 = l2!=null?l2.val:0;
        	int temp = temp_l1+temp_l2+carry;
        	int p1 = temp % 10;
        	ListNode node  = new ListNode(p1);
        	if(tail == null) {
        		tail = node;
        	}else {
            	tail.next = node;
        	}
        	if(head == null) {
        		head =tail;
        	}
        	tail = node;
        	l1 = l1!=null?l1.next:l1;
        	l2 = l2!=null?l2.next:l2;
        	carry = temp/10;
        }
        if(carry >0) {
        	tail.next = new ListNode(carry);
        }
		return head;
	}
	
	public static void main(String args[]) {
		Demo02 demo  = new Demo02();
		ListNode node1_1 = new ListNode(9);
		ListNode node1_2 = new ListNode(9);
		ListNode node1_3 = new ListNode(9);
		node1_1.next = node1_2;
		node1_2.next = node1_3;
		ListNode node2_1 = new ListNode(9);
		ListNode node2_2 = new ListNode(9);
		ListNode node2_3 = new ListNode(9);
		ListNode node2_4 = new ListNode(9);
		node2_1.next = node2_2;
		node2_2.next = node2_3;
		node2_3.next = node2_4;
		ListNode retrunNode = demo.addTwoNumbers(node2_1, node1_1);
		while(retrunNode!=null) {
			System.out.println(retrunNode.val);
			retrunNode = retrunNode.next;
		}
	}
}

                 

        

上一篇:头插法和尾插法实现链表逆序


下一篇:团体程序设计天梯赛(L2-020 功夫传人 (25 分))