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

    class Solution {
    public:
        ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
            ListNode* p = l1;
            ListNode* q = l2;
            ListNode* ret = NULL;
            ListNode* ret_cur = NULL;
            int carry = 0;
            int digit = 0;
            while (p != NULL && q != NULL) {
                carry = add_node(p->val + q->val + carry, ret, ret_cur);
                p = p->next;
                q = q->next;
            }
            while (p != NULL) {
                carry = add_node(p->val + carry, ret, ret_cur); 
                p = p->next;
            }
            while (q != NULL) {
                carry = add_node(q->val + carry, ret, ret_cur); 
                q = q->next;
            }
            if (carry) add_node(1, ret, ret_cur);
            return ret;
        }   
    
        int add_node(int val, ListNode* &head, ListNode* &cur) {
            int carry = val / 10; 
            int digit = carry == 0 ? val : val - 10; 
            ListNode* cur_res = new ListNode(digit);
            if (head == NULL) {
                head = cur_res;
                cur = cur_res;
            } else {
                cur->next = cur_res;
                cur = cur_res;
            }
            return carry;
        }   
    };

    水一发

    第二轮:

    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

    加入空链表头简化空值判断:

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
    12         ListNode holder(0);
    13         ListNode* prev = &holder;
    14         
    15         int carry = 0;
    16         while (l1 != NULL && l2 != NULL) {
    17             int sum = l1->val + l2->val + carry;
    18             carry = sum / 10;
    19             prev->next = new ListNode(sum % 10);
    20             prev = prev->next;
    21             l1 = l1->next;
    22             l2 = l2->next;
    23         }
    24         
    25         ListNode* last = (l1 == NULL) ? l2 : l1;
    26         
    27         while (last != NULL) {
    28             int sum = last->val + carry;
    29             carry = sum/10;
    30             prev->next = new ListNode(sum % 10);
    31             last = last->next;
    32             prev = prev->next;
    33         }
    34         
    35         if (carry) {
    36             prev->next = new ListNode(1);
    37         }
    38         
    39         return holder.next;
    40     }
    41 };
  • 相关阅读:
    jQuery实现仿微博发布框字数提示
    jQuery实现滚动公告练习
    jQuery实现页面搜索
    jQuery某网站品牌列表效果
    [转]windows中断与共享的连接(samba)
    rpm --rebuilddb
    【转】一个 Linux 上分析死锁的简单方法
    取消脚本进程之——后台进程
    whoami与who am i
    linux启动执行某个脚本
  • 原文地址:https://www.cnblogs.com/lailailai/p/3756055.html
Copyright © 2011-2022 走看看