zoukankan      html  css  js  c++  java
  • Add Two Numbers

    package cn.edu.xidian.sselab;

    import java.util.ArrayList;
    /**
     * title:Add Two Numbers
     * content:
     * 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
     */
    public class AddTwoNumbers {

        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            AddTwoNumbers atn = new AddTwoNumbers();
            
            ListNode l1 = atn.new ListNode(5);
            ListNode l2 = atn.new ListNode(5);
            ListNode ls = AddTwoNumbers.addTwoNumbers(l1, l2);
            System.out.println(ls.val);
            System.out.println(ls.next.val);
        }

        class ListNode{
            int val;
            ListNode next;
            public ListNode(int x){
                val = x;
            }
        }
        
        //自己的思路,一开始:定义一个ListNode对象,让他指向l1,结果发现l1在不断的变化,这个对象也跟着一起到了队尾,然后就发现通过这种
        //这种指向方法而不创建对象来做是不可行的
        //接下来换了第二种思路,没加一次就创建一个保存和的对象,然后把这些对象都放到List容器里面,最后建立对象之间的链表关系,拿出第一个对象
        //作为返回值就可以了。
        //这里用到了数据结构里面最基本的方法,三个while循环,加一个判断最后一个节点根据进位值要不要新建
        public static ListNode addTwoNumbers(ListNode l1,ListNode l2){
            int temp = 0;
            int trade = 0;
            int tail = 0;
            ArrayList<ListNode> arr = new ArrayList<ListNode>();
            while(l1 != null && l2 != null){
                temp = l1.val + l2.val + trade;
                tail = temp % 10;
                trade = temp / 10;
                AddTwoNumbers atn = new AddTwoNumbers();
                ListNode ll = atn.new ListNode(tail);
                arr.add(ll);
                l1 = l1.next;
                l2 = l2.next;
            }
            while(l1 != null){
                temp = l1.val + trade;
                tail = temp % 10;
                trade = temp / 10;
                AddTwoNumbers atn = new AddTwoNumbers();
                ListNode ll = atn.new ListNode(tail);
                arr.add(ll);
                l1 = l1.next;
            }
            while(l2 != null){
                temp = l2.val + trade;
                l1 = l2;
                tail = temp % 10;
                trade = temp / 10;
                AddTwoNumbers atn = new AddTwoNumbers();
                ListNode ll = atn.new ListNode(tail);
                arr.add(ll);
                l2 = l1.next;
            }
            if(trade != 0){
                AddTwoNumbers atn = new AddTwoNumbers();
                ListNode last = atn.new ListNode(trade);
                arr.add(last);
                l1 = last;
            }
            int len = arr.size();
            for(int i=0;i<len-1;i++){
                arr.get(i).next = arr.get(i+1);
            }
            return arr.get(0);
            
        }
        
        //参考别人的思路,通过直接新建一个链,思路非常明确,而且很巧妙,将我原来的三个while循环合并成一个循环了。
        public ListNode addTwoNumber(ListNode l1,ListNode l2){
            ListNode result = new ListNode(0);
            ListNode temp = result;
            int sum = 0;
            while(l1 != null || l2 != null){
                sum /= 10;
                if(l1 != null){
                    sum += l1.val;
                    l1 = l1.next;
                }
                if(l2 != null){
                    sum += l2.val;
                    l2 = l2.next;
                }
                temp.next = new ListNode(sum % 10);
                temp = temp.next;
            }
            if(sum / 10 == 1){
                temp.next = new ListNode(1);
            }
            return result.next;
        }
        
    }

  • 相关阅读:
    HDU 1058 Humble Numbers
    HDU 1421 搬寝室
    HDU 1176 免费馅饼
    七种排序算法的实现和总结
    算法纲要
    UVa401 回文词
    UVa 10361 Automatic Poetry
    UVa 537 Artificial Intelligence?
    UVa 409 Excuses, Excuses!
    UVa 10878 Decode the tape
  • 原文地址:https://www.cnblogs.com/wzyxidian/p/4937559.html
Copyright © 2011-2022 走看看