zoukankan      html  css  js  c++  java
  • 链式A+B

    题目描述

    有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。

    给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。

    测试样例:
    {1,2,3},{3,2,1}
    返回:{4,4,4}


    import java.util.*;
    /*
    public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }*/
    public class Plus {
        public ListNode plusAB(ListNode a, ListNode b) {
            // write code here
            int jin=0;
            ListNode c=new ListNode(0);
            ListNode head=c;
            int val;
            while(a!=null||b!=null||jin==1){
                int aval=a==null?0:a.val;
                int bval=b==null?0:b.val;
                val=aval+bval+jin;
                 jin=val/10;
                val=val%10;
                c.next=new ListNode(val);
                c=c.next;
                a=a==null?null:a.next;
                b=b==null?null:b.next;
                }  
                return head.next;
            
        }
    }

    自己第一遍通过的代码和如上思路一致,只是没有使用三目运算符,也没把a,b为null和进位为1总结到一起,if else显得代码冗长。此题有如下几个注意点:

    1.因为while循环中每次都是c.next=new.........,所以第一个节点就是个特例了,为了方便可以在最开始设置一个作为头结点(最后输出他的next域),将第一个节点也和后面的节点归为一类插入。

    2.正常思路是需要判断a是否结束了,b是否结束了,分情况讨论。这里用一个三目运算符,当其中一个为null的时候设置他为0即可。

    3.如果最高位的1是次高位进位的,那么正常思路的情况最后一个1是没法取到的,因为最后判断a,b都为null就结束,所以判定条件为 a!=null||b!=null||jin==1

    4.最后在a=a.next的时候,因为a可能是null,所以在这个时候用一个三目运算符判断如果为null则他的下一次循环还按照null来,不取a.next了,也就不会有越界问题

    5.最开始的c还有一个copy为head,因为c随着链表在向后移动,防止最后输出找不到头结点。最后输出head.next

  • 相关阅读:
    第十六周 项目一-平方根中的异常
    LeetCode之小孩分糖果
    C#中怎样将List<自己定义>转为Json格式 及相关函数-DataContractJsonSerializer
    (016)给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树(keep it up)
    物化视图
    FZU2171:防守阵地 II(线段树)
    鸡尾酒排序
    Android BlueDroid(三):BlueDroid蓝牙开启过程enable
    CF Codeforces Round #256 (Div. 2) D (448D) Multiplication Table
    window.open()具体解释及浏览器兼容性问题
  • 原文地址:https://www.cnblogs.com/tobemaster/p/5874182.html
Copyright © 2011-2022 走看看