zoukankan      html  css  js  c++  java
  • 两数相加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;
    
        }
    }
  • 相关阅读:
    unreal python commandlet print log
    三维空间坐标系变换公式
    Android Volley初探:Volley基本用法
    Android View学习笔记(四):Scroller的原理剖析及使用(下)
    Android View学习笔记(三):Scroller的原理剖析及使用(上)
    Android View学习笔记(二):View滑动方式总结
    Android View学习笔记(一):View基础知识
    获取NavigationBar状态与高度
    解决RecyclerView.getChildAt(Position)崩溃
    RecyclerView瀑布流的那些坑
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/12772828.html
Copyright © 2011-2022 走看看