• LeetCode02:两数相加


    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807


    思路:两个链表不为空时,同一位置对应相加,若和大于10,则标记flag=1,下一位需要进位+1,重置flag=0;循环一直到某个链表为空,再判断剩下链表的情况即可。
    #pragma once
    
    
    struct ListNode {
    	int val;
    	ListNode *next;
    	ListNode(int x) : val(x), next(nullptr) {}
    };
    
    
    /*
    
    执行用时 : 68 ms, 在Add Two Numbers的C++提交中击败了3.43% 的用户
    内存消耗 : 19.1 MB, 在Add Two Numbers的C++提交中击败了0.94% 的用户
    */
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
    {
    	ListNode *newHead = new ListNode(0);
    	ListNode *ptr = newHead;
    	int flag = 0;
    	while (l1 != nullptr && l2 != nullptr)
    	{
    		ListNode* temp = new ListNode(0);
    		ptr->next = temp;
    		ptr = temp;
    		int sum = l1->val + l2->val;
    		if (flag == 1)
    		{
    			sum += 1;
    			flag = 0;
    		}
    		if (sum >= 10)
    		{
    			sum = sum - 10;
    			flag = 1;
    		}
    		ptr->val = sum;
    		l1 = l1->next;
    		l2 = l2->next;
    	}
    	if (flag == 1 && l1 == nullptr && l2 == nullptr)
    	{
    		ListNode *tail = new ListNode(1);
    		ptr->next = tail;
    	}
    	if (l1 != nullptr)
    	{
    		ListNode* tempL1 = l1;
    		while (flag)
    		{
    			int sum = l1->val + 1;
    			if (sum < 10)
    			{
    				l1->val = sum;
    				break;
    			}
    			l1->val = sum - 10;
    			if (l1->next == nullptr)
    			{
    				ListNode* tail = new ListNode(1);
    				l1->next = tail;
    				break;
    			}
    			else
    				l1 = l1->next;
    		}
    		ptr->next = tempL1;
    	}
    
    	if (l2 != nullptr)
    	{
    		ListNode *tempL2 = l2;
    		while (flag)
    		{
    			int sum = l2->val + 1;
    			if (sum < 10)
    			{
    				l2->val = sum;
    				break;
    			}
    			l2->val = sum - 10;
    			if (l2->next == nullptr)
    			{
    				ListNode* tail = new ListNode(1);
    				l2->next = tail;
    				break;
    			}
    			else
    				l2 = l2->next;
    		}
    		ptr->next = tempL2;
    	}
    	return newHead->next;
    }
    

      

  • 相关阅读:
    新浪微博OAuth2授权错误 error:redirect_uri_mismatch
    [Eclipse]自动注释功能
    android 官网访问不了
    [转]Java开发中的23种设计模式详解
    [转]JAVA Iterator 的用法
    [转] Java集合类详解
    MySQL(root用户)密码重置
    SpringMVC项目接入Springfox实战遇到的问题集合
    linux中mysql完整卸载命令操作
    linux-centos挂载新硬盘操作
  • 原文地址:https://www.cnblogs.com/cyhezt/p/10504225.html
Copyright © 2020-2023  润新知