2022-7-29 剑指offer-链表-模拟

剑指 Offer II 025. 链表中的两数相加

难度中等

给定两个 非空链表 l1和 l2 来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

可以假设除了数字 0 之外,这两个数字都不会以零开头。

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode() {}
 7  *     ListNode(int val) { this.val = val; }
 8  *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 9  * }
10  */
11 class Solution {
12     public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
13         int len1=len(l1),len2=len(l2),temp=Math.max(len1,len2);
14         ListNode dummy=new ListNode(0),head=dummy;
15         while (temp>0){
16             int x1=0;
17             int x2=0;
18             if (len1>=temp){
19                 x1=l1.val;
20                 l1=l1.next;
21             }
22             if (len2>=temp){
23                 x2=l2.val;
24                 l2=l2.next;
25             }
26             temp--;
27             
28             ListNode t=new ListNode(x1+x2);
29             //System.out.println(t.val);
30             if (t.val>=10){
31                 t.val-=10;
32                 head.val++;
33             }
34             head.next=t;
35             head=head.next;
36         }
37         flatten(dummy);
38         return dummy.val==0?dummy.next:dummy;
39     }
40 
41 
42 
43     public int len(ListNode head){
44         if (head==null) return 0;
45         return len(head.next)+1;
46     }
47 
48     public void flatten(ListNode head){
49         if (head.next==null) return;
50         flatten(head.next);
51         if (head.next.val>=10){
52             head.next.val-=10;
53             head.val++;
54         }
55     }
56 }

思路:先将对应的数字相加,进位及时处理(也可以不处理),然后从后往前把进位处理结束。

posted on 2022-07-29 16:08  阿ming  阅读(14)  评论(0编辑  收藏  举报

导航