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

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        int getLength(ListNode *head)
        {
            int len = 0;
            while(head)
            {
                len++;
                head=head->next;
            }
            return len;
        };
        ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) 
        {
            int len1 = getLength(l1);
            int len2 = getLength(l2);
            if(len1==0)
                return l2;
            if(len2==0)
                return l1;
            ListNode *head,  *tmp, *p;
            if(len1<len2)
            {
                tmp = l2;
                l2 = l1;
                l1 = tmp;
            }
            head = l1;
            while(l2)
            {
                l1->val += l2->val;
                l1 = l1->next;
                l2 = l2->next;
            }
            p   = head;
            int carry = 0;
            while(p)
            {
              if((p->val+carry)>9)
              {
                  p->val = (p->val+carry)%10;
                  carry = 1;
              }
              else
              {
                p->val = p->val + carry;
                carry = 0;  
              }
              tmp = p;
              p = p->next;
            }
            if(carry==1)
                tmp->next = new ListNode(1);
            return head;
                
        }
    };

    这里进位是向后的,个位在前面

    下面的代码是个位在后面的

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        int getLength(ListNode *head)
        {
            int len = 0;
            while(head)
            {
                len++;
                head=head->next;
            }
            return len;
        };
        ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) 
        {
            int len1 = getLength(l1);
            int len2 = getLength(l2);
            if(len1==0)
                return l2;
            if(len2==0)
                return l1;
            ListNode *head, *tmp, *p;
            if(len1<len2)
            {
                tmp = l2;
                l2 = l1;
                l1 = tmp;
            }
            head = l1;
            int len = max(len1,len2) - min(len1,len2);
            while(len--)
                l1 = l1->next;
            while(l1)
            {
                l1->val += l2->val;
                l1 = l1->next;
                l2 = l2->next;
            }
            p   = head;
            head = new ListNode(0);
            head->next = p;
            tmp = head;
            while(p)
            {
                if(p->val==9)
                {
                    p = p->next;
                }
                else if(p->val<9)
                {
                    tmp = p;
                    p   = p->next;
                }
                else
                {
                    tmp->val++;
                    p->val %= 10;
                    while(tmp->next!=p)
                    {
                        tmp->next->val = 0;
                        tmp = tmp->next;
                    }
                    tmp = tmp->next;
                    p = p->next;
                }
            }
            if(head->val == 0)
            {
                p = head;
                head = head->next;
                delete p;
            }
            return head;
                
        }
    };


    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    C#中class的访问级别
    Install-Package 那点事儿
    Gherkin学习笔记
    mysql-connector-c 安装
    shell实现死循环
    每天一个小算法(6)---- 通过两个栈实现一个队列
    每天一个小算法(5)----找到链表倒数第K个结点
    每天一个小算法(4)----在O(1)时间删除指定结点
    每天一个小算法(3)----倒序打印链表
    每天一个小算法(2)----合并两个有序链表
  • 原文地址:https://www.cnblogs.com/vintion/p/4116825.html
Copyright © 2011-2022 走看看