leetcode_2_Add Two Numbers

来源:互联网 发布:linux stdin 编辑:程序博客网 时间:2024/06/15 09:35

描述

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

思路:

两个链表分别从第一个结点开始分别相加,大于10的进位和下两个结点的值一起相加直至两个结点都到链表的结尾,如果到链表结尾仍然有进位,创建一个新的节点放在较长的那个链表的后面。

代码:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public  ListNode addTwoNumbers(ListNode l1, ListNode l2) {        int len1=0,len2=0;        int sum=0,flag=0;        ListNode pListNode=null;        for(pListNode=l1;pListNode!=null;pListNode=pListNode.next)        {        if(pListNode!=null)        len1++;        }        for(pListNode=l2;pListNode!=null;pListNode=pListNode.next)        {        if(pListNode!=null)        len2++;        }        if(len1>len2)        pListNode=l1;        else        pListNode=l2;        ListNode listNode=pListNode;        while(l1!=null&&l2!=null)        {        sum=l1.val+l2.val+flag;        pListNode.val=sum%10;        pListNode=pListNode.next;        flag=sum/10;        l1=l1.next;        l2=l2.next;        }        while(pListNode!=null)        {        sum=pListNode.val+flag;        pListNode.val=sum%10;        flag=sum/10;        if(flag==0)        break;        pListNode=pListNode.next;        }        if(flag!=0)        {        ListNode li =listNode;        while(li.next!=null)        li=li.next;        ListNode temp=new ListNode(flag);        li.next=temp;        }    return listNode;    }

结果:




0 0
原创粉丝点击