练习编程之leetcode篇----------(2)Add Two Numbers

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

解答:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
     //如果l1为null,l2不为null的话,则直接返回l2
        if(l1==null&&l2!=null)
        {
            return l2;
        }
        //如果l2为null,l1不为null的话,则直接返回l1
        else if(l1!=null&&l2==null)
        {
            return l1;
        }
        //如果l1为null,l2为null的话,则直接返回null
        else if(l1==null&&l2==null)
        {
            return null;
        }
        else
        {
            //把数据存放到结果中去
            //新建一个节点,一开始的时候它0
            ListNode head=new ListNode(0);
            //把这个节点给result
            ListNode result=head;
            int jinwei=0;
            //自己对加法进行模拟
            
            //如果两个链表都没有到结尾
            while(l1!=null&&l2!=null)
            {
                if(l1.val+l2.val+jinwei<10)
                {
                    ListNode temp=new ListNode(l1.val+l2.val+jinwei);
                    //进位为0
                    jinwei=0;
                    //结果值后移一步
                    head.next=temp;
                    head=head.next;
                    //每一个加数后移一步
                    l1=l1.next;
                    l2=l2.next;
                }
                else
                {
                    ListNode temp=new ListNode(l1.val+l2.val+jinwei-10);
                    //进位为0
                    jinwei=1;
                    //结果值后移一步
                    head.next=temp;
                    head=head.next;
                    //每一个加数后移一步
                    l1=l1.next;
                    l2=l2.next;                    
                }                
            }
            //如果l1没到结尾,l2到结尾的话
            if(l1!=null)
            {
                while(l1!=null)
                {
                    if(l1.val+jinwei<10)
                    {
                        ListNode temp=new ListNode(l1.val+jinwei);
                        //进位为0
                        jinwei=0;
                        //结果值后移一步
                        head.next=temp;
                        head=head.next;
                        //每一个加数后移一步
                        l1=l1.next;
                    }
                    else
                    {
                        ListNode temp=new ListNode(l1.val+jinwei-10);
                        //进位为0
                        jinwei=1;
                        //结果值后移一步
                        head.next=temp;
                        head=head.next;
                        //每一个加数后移一步
                        l1=l1.next;
                    }
                }
            }
            //如果l2没到结尾,但是l1到达结尾的话
            if(l2!=null)
            {
                while(l2!=null)
                {
                    if(l2.val+jinwei<10)
                    {
                        ListNode temp=new ListNode(l2.val+jinwei);
                        //进位为0
                        jinwei=0;
                        //结果值后移一步
                        head.next=temp;
                        head=head.next;
                        //每一个加数后移一步
                        l2=l2.next;
                    }
                    else
                    {
                        ListNode temp=new ListNode(l2.val+jinwei-10);
                        //进位为0
                        jinwei=1;
                        //结果值后移一步
                        head.next=temp;
                        head=head.next;
                        //每一个加数后移一步
                        l2=l2.next;
                    }
                }
            }
            //考察最后的进位
            if(jinwei!=0)
            {
                ListNode temp=new ListNode(1);
                //结果值后移一步
                head.next=temp;
                head=head.next;
            }
            return result.next;
        }
    }
}

时间: 2024-11-05 01:01:53

练习编程之leetcode篇----------(2)Add Two Numbers的相关文章

练习编程之leetcode篇----------(1)

Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that

学习编程之Python篇(一)

第一次接触编程,你将面对两大难题: 1.  对所要使用的编程语言的语法和语义不甚了了. 2.  不知道如何通过编程来解决问题. 作为一名新手,你会尝试同时来解决这两个难题:一边熟悉编程语言的语法语义,一边考虑如何靠编程解决问题.这是一个循序渐进的过程,万事开头难,务必保持耐心,切勿操之过急. 学习编程其实没有什么捷径可走,最好的方法就是反复操练,聆听规则,讨论方法,都不如真正做点什么. 在掌握了一些编程语言的语法语义之后,接下来的难题就是怎样才能写出好的程序.那么,我们首先来看看什么是好的程序.

学习编程之Python篇(二)

学习编程与学习踢球.学习演奏并无差别,最佳方式就是不断练习,所以我们鼓励你敲些代码,看看会发生什么,如果这些代码头一次不起作用,没关系,再来,看看你能否把它们纠正过来. 首先是一个简单的快速入门程序,让我们通过了解这个程序的细节,来熟悉Python. 第一项任务:给定半径,计算一个圆的周长和面积. 程序分解: 1.  提示用户输入半径: 2.  应用数学公式,根据获得的半径,得出周长和面积: 3.  输出结果. 代码1.1 运行程序的最简单方法是在IDLE编辑器里打开它,然后选择Run->Run

Android多线程编程之Handler篇(消息机制)

Android多线程编程之Handler篇(消息机制) Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑. MessageQueue 消息队列,以队列的形式(实为单链表结构)对外提供插入和删除的工作, Looper 以无限循环的形式不断获取MessageQueue中的消息,有则处理,无则等待. ThreadLocal ThreadLocal可以在不同的线程互不干扰的存储并提供数据,通过ThreadLocal可以很

【LeetCode】002 Add Two Numbers

题目:LeetCode 002 Add Two Numbers 题意:给定表达非负数的两个链表,这些数字按照反向顺序存储,每个节点包含一个单独的数字,将这两个数相加,返回一个新链表. 样例: Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 链表每个节点的结构: 1 struct ListNode { 2 int val; 3 ListNode *next; 4 ListNode(int x) : val(

LeetCode OJ #2 Add Two Numbers

https://leetcode.com/problems/add-two-numbers/ 题意:两个链表表示两个数 , 2 4 3 5 6 4 按照加法的规则从左往右加以及 进位. 输出:和的链表. 仍然是水题.一些特殊情况需要考虑(这些做题的时候我考虑到了) 1.如果两个长度不等,如l1>l2  ,那么需要l1比l2多出来的部分加上进位copy到ans里 2.5+5的情况,虽然长度相等,但是最高位进位了 可惜,WA了两发,因为 正确的应该是 int v = l1->val + l2-&g

LeetCode No.2 Add Two Numbers

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 ->

【Leetcode】2. Add Two Numbers

Problem: You are given two non-empty linked lists representing two non-negative integers. 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. You may assume the tw

[Leetcode 2, Medium] Add Two Numbers

Problem: 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 ->