• [leetcode] 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

    https://oj.leetcode.com/problems/add-two-numbers/

    思路:模拟题,从头向后依次遍历两个链表相加。

    注意:1. 用dummy head简便处理。2. 注意carry的处理,尤其最高位进位的情况。3. 注意引用null的判断。

    public class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            // printList(l1);
            // printList(l2);
            ListNode p = new ListNode(-1);
            ListNode head = p;
            int c = 0;
            while (l1 != null || l2 != null || c == 1) {
                int curInt = 0;
                if (l1 != null)
                    curInt += l1.val;
                if (l2 != null)
                    curInt += l2.val;
                curInt += c;
                if (curInt > 9) {
                    c = 1;
                    curInt -= 10;
                } else
                    c = 0;
                p.next = new ListNode(curInt);
    
                p = p.next;
                if (l1 != null)
                    l1 = l1.next;
                if (l2 != null)
                    l2 = l2.next;
            }
    
            // printList(head.next);
    
            return head.next;
        }
    
        void printList(ListNode node) {
            while (node != null) {
                System.out.print(node.val);
                if (node.next != null)
                    System.out.print("->");
                node = node.next;
            }
            System.out.println();
    
        }
    
        public static void main(String[] args) {
            ListNode l1 = new ListNode(2);
            l1.next = new ListNode(4);
            l1.next.next = new ListNode(5);
    
            ListNode l2 = new ListNode(5);
            l2.next = new ListNode(6);
            l2.next.next = new ListNode(4);
    
            new Solution().addTwoNumbers(l1, l2);
    
        }
    
    }
    
    class ListNode {
        int val;
        ListNode next;
    
        ListNode(int x) {
            val = x;
            next = null;
        }
    }

    第二遍记录:l1,l2指针忘记往后移动了

    /**
     * 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) {
            ListNode head = new ListNode(-1);
            ListNode cur = head;
            int c=0;
            while(l1!=null||l2!=null||c!=0){
                int curVal=0;
                if(l1!=null)
                    curVal+=l1.val;
                if(l2!=null)
                    curVal+=l2.val;
                curVal+=c;
                
                if(curVal>9){
                    curVal-=10;
                    c=1;
                }else{
                    c=0;
                }
                cur.next= new ListNode(curVal);
                
                cur=cur.next;
                if(l1!=null)
                    l1=l1.next;
                if(l2!=null)
                    l2=l2.next;
            }
            return head.next;
        }
    }

    复习注意:

    1. dummyhead的使用。

    2. carry的处理。

    3. 三个指针不要忘记移动。 

  • 相关阅读:
    怎样才有资格被称为开源软件
    [翻译]开发Silverlight 2.0的自定义控件
    网上Silverlight项目收集
    Google 分析的基准化测试
    IIS 承载的WCF服务失败
    Lang.NET 2008 相关Session
    Silverlight 2.0 beta1 堆栈
    asp.net 性能调较
    SQL Server 2005 的nvarchar(max),varchar(max)来救火
    LINQPad
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3810669.html
Copyright © 2020-2023  润新知