两数相加2

此博客链接:https://www.cnblogs.com/ping2yingshi/p/12772828.html

两数相加2()

题目链接:https://leetcode-cn.com/problems/add-two-numbers-ii/solution/lian-biao-fan-zhuan-bu-jie-zhu-zhan-by-tiantianliu/

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

进阶:

如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。

示例:

输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 8 -> 0 -> 7

题解:

         思路:

                  1.把两个链表反转。

                  2.用两数相加的思想做。

                  3.把相加和的链表也反转。

 没有输出正确代码如下:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode rel1=new ListNode(0);//l1反转的头节点
        ListNode rel2=new ListNode(0);//l2反转的头节点
        ListNode re1=rel1.next;
        ListNode re2=rel2.next;
        while(l1!=null)//反转l1
        {
            ListNode temp=l1;
            l1=l1.next;
            temp.next=re1;
            re1=temp;
        }
         while(l2!=null)//反转l2
        {
            ListNode temp=l2;
            l2=l2.next;
            temp.next=re2;
            re2=temp;
        }
         ListNode newsum=new ListNode(0);//新建存储和节点
         ListNode cur=newsum;
         int count=0;
          int sumcount=0;
         while(rel1!=null||rel2!=null)
         {
             if(rel1!=null&&rel2!=null)
             {
                 sumcount=rel1.val+rel2.val+count;
             }
             else if(rel1==null&&rel2!=null)
                sumcount=rel2.val+count;
             else
                sumcount=rel1.val+count;
                count=sumcount/10;
                sumcount=sumcount%10;
                cur.next=new ListNode(sumcount);
                 cur=cur.next;
             if(rel1!=null)
                    rel1=rel1.next;
             if(rel2!=null)
                    rel2=rel2.next;
                 
         }
         if(count==1)
             cur.next= new ListNode(1);
        ListNode renewsum=new ListNode(0);
        ListNode newcur=renewsum;
        while(newsum!=null)//反转和链表
        {
            ListNode temp=newsum;
            newsum=newsum.next;
            temp.next=newcur;
            newcur=temp;
        }
        return renewsum.next;

    }
}

报错截图;

修改了代码逻辑,把有些新建的头节点没有去掉,但是还是输出为空。

代码如下:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode rel1=new ListNode(0);//l1反转的头节点
        ListNode rel2=new ListNode(0);//l2反转的头节点
        ListNode re1=rel1;
        ListNode re2=rel2;
        while(l1!=null)//反转l1
        {
            ListNode temp=l1;
            l1=l1.next;
            temp.next=re1;
            re1=temp;
        }
         while(l2!=null)//反转l2
        {
            ListNode temp=l2;
            l2=l2.next;
            temp.next=re2;
            re2=temp;
        }
         ListNode newsum=new ListNode(0);//新建存储和节点
         ListNode cur=newsum;
         ListNode rel11=rel1.next;
         ListNode rel22=rel2.next;
         int count=0;
          int sumcount=0;
         while(rel11!=null||rel22!=null)
         {
             if(rel11!=null&&rel22!=null)
             {
                 sumcount=rel11.val+rel22.val+count;
             }
             else if(rel11==null&&rel22!=null)
                sumcount=rel22.val+count;
             else
                sumcount=rel11.val+count;
                count=sumcount/10;
                sumcount=sumcount%10;
               ListNode  curnode=new ListNode(sumcount);
                cur.next=curnode;
                cur=cur.next;
             if(rel11!=null)
                    rel11=rel11.next;
             if(rel22!=null)
                    rel22=rel22.next;
                 
         }
         if(count==1)
         {
           ListNode  curnode=new ListNode(1);
                cur.next=curnode;
         }
            
        ListNode renewsum=new ListNode(0);
        ListNode newcur=renewsum;
        ListNode newsum1=newsum.next;
        while(newsum1!=null)//反转和链表
        {
            ListNode temp=newsum1;
            newsum1=newsum.next;
            temp.next=newcur;
            newcur=temp;
        }
        return renewsum.next;

    }
}
原文地址:https://www.cnblogs.com/ping2yingshi/p/12772828.html