LeetCode题解2 两数相加

------------恢复内容开始------------

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

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

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

这道题的示例其实有点误导

题目说两个逆序链表 求和 并返回相同形式链表

简单理解就是求和 ( 个人比较讨厌这类误导 简单点  告诉我需求是什么看我能不能实现不就结了)

 

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
这道题主要是这个注释  他内部构造了一个链表节点类  之前我还想随便写个数组呢
 
lass Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
      // 第一步构建返回值 这个变量构建就知道大家的基础老师是什么水平了(主要看他讲的细不细)
  ListNode head = null, tail = null;
  // 余数
  int mod = 0;
  //第二步取值 || 是防止两个序列不等长的情况
  while(l1 !=null || l2!=null ){
      // 这道题这里看懂了就能解开了 ( 这个链表 不存在下标 对象连对象 这题也就考一下链表的数据结构)
      //三目运算对空值处理
      int n1 = l1 != null ? l1.val : 0;
      int n2 = l2 != null ? l2.val : 0;
      // 所谓的余数是进位 非0即1
      int sum = mod +n1+n2;
      // 首次循环
      if(head == null){
       // 表示只有一个节点  不足十对十取余是自身 多余十对十取余是该为应有的值( 一个小逻辑原谅我数学不好 解释不太清楚)
       head = tail =  new ListNode(sum%10) ;
      }else{
       // 尾节点
       tail.next = new ListNode(sum%10);
       // 尾节点变更
       tail = tail.next;    
      }
      //计算机计算方式 整数计算智能得到整数 不足十为0 多余十为1 ( 一位加减加不出最高9+9)
      mod = sum/10;
     // 真正的链表遍历
        if (l1 != null) {
                    l1 = l1.next;
                }
              if (l2 != null) {
                    l2 = l2.next;
               }
 
    }  
     // 循环结束时候如果mod>0则需进位
      if (mod> 0) {
                tail.next = new ListNode(carry);
            }
              return head;

    }
}
 
 

LeetCode题解2 两数相加

上一篇:node


下一篇:碱土金属元素