letcode hot100 第二题 两数相加

在这里插入图片描述


今日刷letcode的感悟:先把现实中的思路写好,比如说这个题目的加法,通过,语言的语法,解题的经验,用示例丰富细节,完成解题。
解法:1互换链表,那个长就作为主链表,把两链表的和存到主链表上。
当短链表长度不够时就赋值为null,并将它节点的值赋值为零。
加法部分,两数之和与进位符相加,大于等于10要进位,使得进位符+1,不大于等于10就要使进位符等于0;将和取余(用%),余数放到主链表节点上。
当主链表节点遍历完后,判断进位符,若进位符等于1,则新建节点,并将尾节点的next指向新节点ListNode。
程序结果返回头节点。

代码

/**
 * 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; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
     ListNode l=null;
     ListNode tail=null;
     ListNode head=null;
     int caryy=0;
     int k=0;
     if(length(l1)<length(l2)){
         l=l2;
         l2=l1;
         l1=l;//如果l1的长度比l2短就互换。
     }
      head=l1;
     while(l1!=null){
       if(l2==null){
           k=0;
       }else{
           k=l2.val;
       }
       int len = l1.val+k+caryy;
       l1.val=len%10;
       if(len>9){
           caryy=1;
       }else{
           caryy=0;
       }
       tail=l1;
       l1=l1.next;
      if(l2!=null){
          l2=l2.next;
          }else{
              l2=null;
          }
     }
     if(caryy==1){
          tail.next=new ListNode(1);
          return head;
     }else{
         return head;
     }
    }
    public int length(ListNode l){
        int c=0;
        while(l!=null){
            l=l.next;
            c++;
        }
        return c;
    }
}

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...
win11本地账户怎么改名?win11很多操作都变了样,用户如果想要...