• 两数相加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;
    
        }
    }
  • 相关阅读:
    【LeetCode】147. Insertion Sort List
    【LeetCode】64. Minimum Path Sum
    【LeetCode】7. Reverse Integer
    【LeetCode】107. Binary Tree Level Order Traversal II (2 solutions)
    【LeetCode】114. Distinct Subsequences
    【LeetCode】35. Search Insert Position (2 solutions)
    为什么easyui的datagrid里getSelections还有getChecked只能获取一行值呢?
    IE兼容模式下 SCRIPT1028: 缺少标识符、字符串或数字
    修改easyui的easyloader的默认css目录路径
    如何在Visual Studio的查找功能中使用正则表达式?
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/12772828.html
Copyright © 2020-2023  润新知