zoukankan      html  css  js  c++  java
  • LeetCode.2

      You are given two non-empty linked lists representing two non-negative integers. 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.

      You may assume the two numbers do not contain any leading zero, except the number 0 itself.

      Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
      Output: 7 -> 0 -> 8

      题意大致是说将两组用链表保存的数据单独相加,低一位上的和大于10,则进位到高一位上,并将数据用链表保存,比如:123和987两组数是用链表保存的:1 -> 2 -> 3,9 -> 8-> 7,1 + 9 = 10,则该位为0,向下一位中进1,下一位中2 + 8 = 10,加1后得到11,向下一位中进1,该位为1,下一位中3 + 7 = 10,加1得到11,该位为1,多一个1需要再加一个链表来保存它,结果:0 -> 1 -> 1 -> 1- > 1。

      下面是解决方案(C语言):

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    struct ListNode * addTwoNumbers(struct ListNode * l1, struct ListNode * l2) {
        struct ListNode * sum;
        struct ListNode * t;
        struct ListNode * s, * AddNode;
        int num1, num2;
        int flag = 0;
    
        if (l1 == NULL) return l2;
        if (l2 == NULL) return l1;
        
        sum = (struct ListNode *)malloc(sizeof(struct ListNode));
        s = sum;
        while(l1 || l2)
        {
            t = (struct ListNode *)malloc(sizeof(struct ListNode));
            num1 = l1 == NULL? 0 : l1 -> val;
            num2 = l2 == NULL? 0 : l2 -> val;
            t -> val = num1 + num2 + flag;
            flag = (t -> val > 9) ? 1 : 0;
            if(flag)
                t -> val %= 10;
            if(l1 != NULL)
                l1 = l1 -> next;
            if(l2 != NULL)
                l2 = l2 -> next;
            s -> next = t;
            s = t;
            t -> next = NULL;        //一开始提交很多次都不过,错误竟然是没有写这个
        }
        if(flag)
        {
            AddNode = (struct ListNode *)malloc(sizeof(struct ListNode));
            AddNode -> val = flag;
            AddNode -> next = NULL;
            t -> next = AddNode;
        }
        
        return sum -> next;
    }

      Submission Result: Accepted.

  • 相关阅读:
    软件工程第二次作业
    第一次作业
    理论物理特训-02
    左神-06 二叉树
    哲学通论之人-05(end)
    哲学通论之人-04
    左神-05 二分搜索(多看几遍)
    哲学通论之人-01
    航空母舰-04(end)
    题解 P3126 【[USACO15OPEN]回文的路径Palindromic Paths】
  • 原文地址:https://www.cnblogs.com/darkchii/p/7568099.html
Copyright © 2011-2022 走看看