两数相加

思路:一位一位相加,当遇到长度不相等时,
-岔路:
1-多余长度的子链表,直接跟在新链表尾
-好处:多余长度节点,不用计算,减少运算时间
-缺点:必然导致while逻辑不统一,从每次都是+,变成添加链表节点,导致,代码不简洁
2-不管长度相等不,有节点就+节点值,无节点,就+0
-优点:思维统一,代码好编写,代码简洁
-缺点:计算机做了多余的操作
-注意点
1.最后一位进位,容易忘。
2.对于最后一为进位,我选择在while里加进位不位0的条件,导致,while里所有语句由于cp!=0都要被判断一次。
-有人选择,在while里,加一个判断cp,如果cp!=0就先添加节点,把cp赋值,也可以把最后一为cp考虑进去,而且,对循环执行次数没影响。

/**

  • Definition for singly-linked list.

  • public class ListNode {

  • int val;
    
  • ListNode next;
    
  • ListNode(int x) { val = x; }
    
  • }
    */
    class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode p1 = l1;
    ListNode p2 = l2;
    int temp1 = 0;
    int temp2 = 0;
    int cp = 0;
    int result = 0;
    ListNode l3 = new ListNode(0);
    ListNode p3 = l3;
    while(p1 !=null || p2 !=null || cp!=0){
    if(p1 == null){
    if(p2 != null){
    temp1 = 0;
    temp2 = p2.val;
    }else{
    //这是不可能
    }
    }else{
    temp1 = p1.val;
    if( p2 == null){
    temp2 = 0;
    }else{
    temp2 = p2.val;
    }
    }
    result = (temp1 + temp2 + cp) % 10;

         cp =  (temp1 +temp2 +cp) / 10;
         temp1 = 0;
         temp2 = 0;
         p3.next = new ListNode(result);
         p3 = p3.next;
         if(p1 != null){
             p1 = p1.next;    
         }
         if(p2 != null){
             p2 = p2.next;    
         }
         
     }   
     return l3.next;
    

    }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值