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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值