zoukankan      html  css  js  c++  java
  • LeetCode OJ--Add Two Numbers

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

    将用链表表示的两个数相加,(2 -> 4 -> 3) + (5 -> 6 -> 4) 就是342 + 465.刚开始把题目给理解错了,做复杂了。

    主要是对指针的理解。

    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
            // IMPORTANT: Please reset any member data you declared, as
            // the same Solution instance will be reused for each test case.
            if(l1==NULL)
                return l2;
            if(l2==NULL)
                return l1;
            int sum;
            int carry = 0;
             
            ListNode *ans = l1;
            ListNode *ans3 = ans;
            //最后结果存到l1 ans
            while(l1&&l2)
            {
                sum = l1->val + l2->val + carry;
                carry = sum/10; 
                if(carry)
                    l1->val = sum - 10;
                else
                    l1->val = sum;
                l1 = l1->next;
                l2 = l2->next;
            }
            if(l1==NULL &&l2==NULL)
            {
                if(carry == 0)
                    return ans;
    
                //找到最后一个节点
                while(ans3->next)
                    ans3 = ans3->next;
                ListNode *temp =  new ListNode(1);
                ans3->next = temp;
                return ans;
            }
            //将两种情况化成一种
            if(l1 == NULL)
            {
                while(ans3->next)
                    ans3 = ans3->next;
                ans3->next = l2;
                l1 = l2;
                l2 = NULL;
            }
             
            //要看最高位进位的情况
            if(carry == 0)
                return ans;
    
            while(carry == 1 && l1)
            {
    
                l1->val += carry;
                if(l1->val > 9)
                {
                    l1->val = l1->val %10;
                    carry = 1;
                    l1 = l1->next;
                }
                else
                    return ans;
    
            }
            if(carry == 1)
            {
                while(ans3->next)
                    ans3 = ans3->next;
                ListNode *temp =  new ListNode(1);
                ans3->next = temp;
            }
             
            return ans;
        }
    int main()
    {
        ListNode *l1 = new ListNode(2);
        ListNode *n1 = new ListNode(4);
        ListNode *n5 = new ListNode(4); 
    
        ListNode *l2 = new ListNode(5);
        ListNode *n4 = new ListNode(6);
        ListNode *n6 = new ListNode(4);
        //ListNode *n8 = new ListNode(8);
        l1->next = n1;
        n1->next = n5;
        l2->next = n4;
        n4->next = n6;
        //n6->next = n8;
        Solution myS;
        ListNode *temp = myS.addTwoNumbers(l2,l1);
        return 0;
    }

    囧,读复杂了,还做了个链表的翻转。

    ListNode *reverse(ListNode * l2)
        {
            ListNode *n1,*n2,*before;
            n1 = l2;
            n2 = n1->next;
            before = NULL;
            while(n2)
            {
                n1->next = before;
                before = n1;
                n1 = n2;
                n2 = n2->next;
            }
            n1->next = before;
            return n1;
        }

    三个指针做链表的反转。

  • 相关阅读:
    Shell流程控制语句if
    Linux命令之read
    Docker容器(六)——创建docker私有化仓库
    Docker容器(五)——Docker静态化IP
    Docker容器(四)——常用命令
    python笔记
    iOS应用性能调优建议
    QQ音乐项目(OC版)
    iOS : 静态库制作
    iOS : 静态库(.framework)合并
  • 原文地址:https://www.cnblogs.com/qingcheng/p/3512763.html
Copyright © 2011-2022 走看看