zoukankan      html  css  js  c++  java
  • add two numbers

    1. Question

    给两个链表,分别用于表示两个非负数字。数的每一位在链表中反序存放(e.g. 2->4->3代表数342),且每个节点一位。对这两个数求和并返回,结果也用链表表示。

    You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
    
    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
    Output: 7 -> 0 -> 8

    2. Solution

    定义四个变量:

    1. i:数1位指针,初值为链表头
    2. j:数2位指针,初值为里边头
    3. k:进位,初值为0
    4. res:结果链表指针

    *res = ( *i + *j + k ) %10;

    k = ( *i + *j + k ) / 10;

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) {
     7  *         val = x;
     8  *         next = null;
     9  *     }
    10  * }
    11  */
    12 public class Solution {
    13     public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    14         if( l1 == null ) return l2;
    15         if( l2 == null ) return l1;
    16         
    17         int quotient = 0;
    18         ListNode p = new ListNode(0);
    19         p.next = l1;    //use l1 as the result link list
    20         ListNode q = l2;
    21         while( p.next!=null && q!=null ){
    22             p.next.val = p.next.val + q.val + quotient;
    23             quotient = p.next.val / 10;
    24             p.next.val %= 10;
    25             p = p.next;
    26             q = q.next;
    27         }
    28         if( q != null ) p.next = q;
    29         while( p.next != null && quotient != 0 ){
    30             p.next.val += quotient;
    31             quotient = p.next.val / 10;
    32             p.next.val %= 10;
    33             p = p.next;
    34         }
    35         if( quotient != 0 )
    36             p.next = new ListNode(quotient);
    37         
    38         return l1;
    39     }
    40 }
    addTwoNumbers

    3. 复杂度分析

    算法遍历链表,时间复杂度O(n)

  • 相关阅读:
    java读写文本文件
    django学习<二>:连接数据库
    【MongoDB】递归获取字段更新表达式,更新复杂数据类型对象
    【MongoDB】C#中的Mongo数据类型转换
    【MongoDB】 基于C#官方驱动2.2版的封装类
    【Python】 属性的 get 与 set 方法
    【基础知识】UML基础
    【C#】 知乎用户网络爬虫
    【C#】MVC项目中搭建WebSocket服务器
    【MongoDB】 Windows 安装
  • 原文地址:https://www.cnblogs.com/hf-cherish/p/4567288.html
Copyright © 2011-2022 走看看