(一)题目描述
给定两个 非空链表 l1和 l2 来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
可以假设除了数字 0 之外,这两个数字都不会以零开头。
(2)解题思路
如同正整数的加法一样,两数相加,该进位则进位。
(3)实现代码
class Solution { public ListNode addTwonumbers(ListNode l1, ListNode l2) { ArrayListres = new ArrayList<>(); ListNode head = new ListNode(); ListNode l3=head; int sum=0,cnt=0,sum_cnt=0,pre1=0,pre2=0; ListNode p1=l1,p2=l2; //首先得链表反转 p1=reverseListByLocal(l1); p2=reverseListByLocal(l2); //遍历两链表 while (p1!=null&&p2!=null){ sum_cnt=p1.val+p2.val+cnt; sum=sum_cnt%10; cnt=sum_cnt/10; res.add(sum); p1=p1.next; p2=p2.next; } //剩下的链表p1不为Null if(p1!=null){ while (p1!=null){ pre1=p1.val+cnt; sum=pre1%10; res.add(sum); cnt=pre1/10; p1=p1.next; } }else { //剩下p2不为Null while (p2!=null){ pre2=p2.val+cnt; sum=pre2%10; res.add(sum); cnt=pre2/10; p2=p2.next; } } //注意!最后可能还有进位 if(cnt!=0){ res.add(cnt); } for (int i = res.size()-1; i >=0 ; i--) { ListNode node=new ListNode(res.get(i)); l3.next=node; l3=l3.next; } l3.next=null; return head.next; } //链表的就地反转(画一个图即可) public ListNode reverseListByLocal(ListNode listNode){ ListNode resultList = new ListNode(-1); resultList.next= listNode; ListNode p = listNode; ListNode pNext = p.next; while (pNext!=null){ p.next = pNext.next; pNext.next = resultList.next; resultList.next = pNext; pNext=p.next; } return resultList.next; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)