力扣刷题-两数相加

文章目录

  • 前言
  • 一、两数相加
  • 二、代码示例
    • 1.示例编写
    • 2.结果输出
  • 总结


前言

一、两数相加

力扣刷题-两数相加_第1张图片

二、代码示例

1.示例编写

代码如下(示例):

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head1 = l1;//定义一个节点将链表1的头结点存储起来
        ListNode head2 = l2;//定义一个节点将链表2的头结点存储起来

        while (head1!=null){
            if(head2!=null){//情况1:链表1的长度大于链表2的长度
                head1.val += head2.val;
                head2 = head2.next;//链表2向后遍历
            }
            if(head1.next == null&&head2 != null){//情况2:链表1的长度小于链表2的长度
                head1.next = head2;//将链表2的数字赋给链表1
                break;
            }
            head1 = head1.next;//链表1向后遍历
        } 
        merge(l1);//进位
        return l1;
    }
    public void merge(ListNode head){
        while(head != null){
            if(head.val >= 10){//每过10则进一位
                head.val = head.val%10;
                if(head.next == null){//末尾需要进位
                head.next = new ListNode(0);//此处是申请一个新的节点
            }
                head.next.val += 1;//进位
            }
            head = head.next;//遍历整个链表
        }
    }

}

2.结果输出

情况1:l1链表的长度大于等于l2链表的长度
力扣刷题-两数相加_第2张图片
情况2:l1链表的长度小于l2链表的长度
力扣刷题-两数相加_第3张图片
情况3:末尾需要进位
力扣刷题-两数相加_第4张图片

总结

需要掌握的思想:
(1)知道如何遍历整个链表,采用方法next;
(2)掌握分情况来进行代码编写,本实例分成了以下情况:
情况1:链表1的长度大于等于链表2的长度
情况2:链表2的长度大于链表1的长度
情况3:需要进位,例如三位数和三位数相加的话有可能超过三位数,这时候就需要进位
(3)掌握申请新节点的方法:head.next = new ListNode(0)
(4)学会如何将十位和个位进行分离:head.val%10

你可能感兴趣的:(java专栏,leetcode,链表,算法)