微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;
    }
}

原文地址:https://www.jb51.cc/wenti/3287614.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐