LeetCode-两数相加

题设要求:

两数相加.jpg

完整代码:

  public class ListNode {
      int val;
      ListNode next;
      ListNode(int x) { val = x; }
 }

public class Solution {
    public int l1Length=0;
    public int l2Length=0;

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode headListNode=new ListNode(0);   //返回结果的链表头指针
        ListNode firstNode=l1;           //链表1                 
        ListNode secondNode=l2;          //链表2
        ListNode curNode=headListNode;   //目前操作节点指针
        boolean isCarry=false;
        
        while(firstNode!=null || secondNode!=null){
            //获取两链表同位节点值
            int num1=(firstNode==null)?0:firstNode.val;
            int num2=(secondNode==null)?0:secondNode.val;
            
            //计算节点值
            int sum;
            if(isCarry){
                sum=num1+num2+1;
            }else{
                sum=num1+num2;
            }
            
            //是否有进位
            isCarry=(sum/10)>0;
            
            //增加新结点
            curNode.next=new ListNode(sum%10);
            
            //准备获取下一个节点值
            curNode=curNode.next;
            
            //存在链表1已经遍历完成的情况
            if(firstNode!=null){
                firstNode=firstNode.next;
            }
            
            //存在链表2已经遍历完成的情况
            if(secondNode!=null){
                secondNode=secondNode.next;
            }
        }
        
        //两条链表节点遍历完成判断最后是否留有进位
        if(isCarry){
            curNode.next=new ListNode(1);
        }
    
        return headListNode.next;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。