• 2.两数相加


    代码:

     1 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
     2         ListNode result=new ListNode(0);
     3         ListNode a=result;
     4         int fruit=0;
     5         while (l1!=null||l2!=null){
     6             int x=(l1==null?0:l1.val);
     7             int y=(l2==null?0:l2.val);
     8             int sum=x+y+fruit;
     9 
    10             fruit=sum/10;
    11             sum=sum%10;
    12             a.next=new ListNode(sum);
    13             a=a.next;
    14             if (l1!=null){
    15                 l1=l1.next;
    16             }
    17             if (l2!=null){
    18                 l2=l2.next;
    19             }
    20         }
    21         if (fruit==1){
    22             a.next=new ListNode(fruit);
    23         }
    24         return result.next;
    25     }
    View Code

    测试代码:

     1 package medium;
     2 
     3 
     4 public class Solution2 {
     5 
     6 
     7     public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
     8         ListNode result=new ListNode(0);
     9         ListNode a=result;
    10         int fruit=0;
    11         while (l1!=null||l2!=null){
    12             int x=(l1==null?0:l1.val);
    13             int y=(l2==null?0:l2.val);
    14             int sum=x+y+fruit;
    15 
    16             fruit=sum/10;
    17             sum=sum%10;
    18             a.next=new ListNode(sum);
    19             a=a.next;
    20             if (l1!=null){
    21                 l1=l1.next;
    22             }
    23             if (l2!=null){
    24                 l2=l2.next;
    25             }
    26         }
    27         if (fruit==1){
    28             a.next=new ListNode(fruit);
    29         }
    30         return result.next;
    31     }
    32 
    33     public static void main(String[] args) {
    34         ListNode a1=new ListNode(9);
    35         ListNode a2=new ListNode(5);
    36         a1.next=a2;
    37         ListNode b1=new ListNode(3);
    38         ListNode b2=new ListNode(1);
    39         b1.next=b2;
    40         ListNode node=new Solution2().addTwoNumbers(a1,b1);
    41         while (node!=null){
    42             System.out.println(node.val);
    43             node=node.next;
    44         }
    45 
    46     }
    47 }
    View Code

    链表结构:

     1 package medium;
     2 /**
     3 * @Description: (简单链表)
     4 * @Author YoungSone
     5 * @Date 2020/5/13 9:34
     6 * @version V1.0
     7 */
     8 public class ListNode {
     9     int val;
    10     ListNode next;
    11     ListNode(int x){
    12         val=x;
    13     }
    14 }
    View Code

    关键点:单链表,引用传递,取余取商,进位

    解题思路:首先了解题目需求,确定所使用的数据结构为单链表,建立对应数据结构

         然后通过while循环遍历单链表,通过判断节点是否为空对变量进行赋值,

         然后进行相应取余取商计算,在这一步中通过设定变量fruit值来实现进1操作组成sum值,得到新链表各个节点的val值,

         最后循环完毕之后再次对fruit进行判断是否为1,完成最后节点的添加。组成新的链表,返回result.next.

    疑问:为什么是返回result.next,而不是a.next呢?因为在计算过程之中,a所指向的地址以发生改变不再是原来所指向的位置

    图示:一开始 a,result同时指向节点1,随着a=a.next操作 a指向了节点2,而result还是指向节点1.通过返回result.next可以获得所有节点的值即正确结果

    1 2 3 ... n
  • 相关阅读:
    关于贝宝支付的一些信息和思路
    自动执行的脚本不错的思路
    关于微信公众平台生成带参数的二维码的场景值和系统对接的问题
    centos7.3查看时区
    关于where和having的直观理解
    关于微信支付的退款那些事
    关于微信支付的那些事
    正则替换
    java 正则表达式语法
    正则表达式
  • 原文地址:https://www.cnblogs.com/YoungSone/p/12880635.html
Copyright © 2020-2023  润新知