2022-5-7 链表

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 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         ListNode dummy=new ListNode(0),head=dummy;
14         int prev=0;
15         while (l1!=null&&l2!=null){
16             if (l1.val+l2.val+prev>=10){
17                 head.next=new ListNode(l1.val+l2.val+prev-10);
18                 prev=1;
19                 
20             }else {
21                 head.next=new ListNode(l1.val+l2.val+prev);
22                 prev=0;
23 
24             }
25             //System.out.println(head.val);
26             head=head.next;
27             l1=l1.next;
28             l2=l2.next;
29         }
30         ListNode temp=l1==null?l2:l1;
31         while (temp!=null){
32             if (prev+temp.val>=10){
33                 
34                 head.next=new ListNode(temp.val+prev-10);
35                 prev=1;
36             }else{
37                 
38                 head.next=new ListNode(temp.val+prev);
39                 prev=0;
40             }
41             head=head.next;
42             temp=temp.next;
43         }
44         if (prev!=0) head.next=new ListNode(1);
45         return dummy.next;
46     }
47 }

思路:从后面逐位相加,prev标识是否有进位。出循环后需要将剩余部分处理完,注意最后可能还会有进位。dummy哑头方便返回头指针

posted on 2022-05-07 15:56  阿ming  阅读(22)  评论(0)    收藏  举报

导航