2022-7-29 剑指offer-链表-模拟
给定两个 非空链表 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 }
思路:先将对应的数字相加,进位及时处理(也可以不处理),然后从后往前把进位处理结束。