0
点赞
收藏
分享

微信扫一扫

力扣(LeetCode)第二题—两数相加

AbrahamW 2022-01-24 阅读 83

题目描述:

示例:

此题我们一定要注意审题,数字每位按照逆序存储,要知道链表存储的正确数字才开始相加

接下来,就是解决如何相加了

  1. 我们知道两数相加是从个位开始,而数字刚好在链表中逆序存储,两个链表的头部正是数字最后一位数,这样就可以按链表顺序相加了
  2. 再就是判断是否进位,和大于10就进位,而且进位只可能是1

代码实现:

public class LeetCode2 {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode dummyHead =new ListNode(-1);//虚拟头节点
            ListNode prev = dummyHead;
            int a = 0;//用来判断是否进位
            while (l1 != null || l2 != null){//有一个不空就需要执行
                int x = (l1 != null) ? l1.val : 0;
                int y = (l2 != null) ? l2.val : 0;
                int sum = x + y + a;
                prev.next = new ListNode(sum%10);
                prev = prev.next;//指针向后移动
                a = sum/10;
                l1 = (l1!=null) ? l1.next : null;//l1,l2也往后移一位
                l2= (l2!=null) ? l2.next : null;
            }
            if (a > 0){//遍历结束后,a>0则需要在链表的后面附加一个节点
                prev.next = new ListNode(a);
            }
            return dummyHead.next;

        }

    }


 

举报

相关推荐

0 条评论