力扣让我心碎的第一天

1.


给定一个整数数组nums和一个整数目标值target请你在该数组中找出和为目标值target的那两个整数,
并返回它们的数组下标

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

 

思路

 

#include <stdio.h>
#include <stdlib.h>

int* twoSum(int *nums, int numsSize, int target,int *returnSize)
{
	int left = 0;
	int right = numsSize - 1;
	while (right > 0)
	{
		for (int i = 0; i < right; i++)
		{
			if (nums[i] + nums[right] == target)
			{
				int *data = (int*)malloc(sizeof(int)* 2);
				data[0] = i;
				data[1] = right;
				*returnSize = 2;
				return data;
			}
		}
		--right;
	}
	return NULL;
}


int main()
{
	int nums[] = { 2, 7, 11, 5 };
	int size = sizeof(nums) / sizeof(nums[0]);
	int target = 9;
	int *data = twoSum(nums, 4, target);
	if (data != NULL)
	{
		printf("[%d,%d]\n", data[0], data[1]);
	}
	else
	{
		printf("不存在!\n");
	}
	free(data);
	system("pause");
	return 0;
}

2.

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字

请你将两个数相加,并以相同形式返回一个表示和的链表

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

 

struct ListNode
{
	int val;
	struct ListNode *next;
};

struct ListNode* BuyNode()
{
	struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
	if (node == NULL)
	{
		exit(1);
	}
	return node;
}

struct ListNode* addTwoNumbers(struct ListNode* L1, struct ListNode* L2)
{
	struct ListNode* p1 = L1;
	struct ListNode* p2 = L2;
	struct ListNode* newnode = NULL;
	struct ListNode* L3 = BuyNode();  //头结点
	struct ListNode* p3 = L3; 
	p3->next = NULL; 
	int tmp = 0;  //缓存进位  
    
	while (p1 != NULL || p2 != NULL)  //当L1和L2同时为空,各个数位相加完成
	{                           
		newnode = BuyNode();
		p3->next = newnode;   //L3连接新节点
		p3 = p3->next;        //p3指向新节点
		p3->next = NULL;      
		if (p1 == NULL&&p2 != NULL)  //L1空,L2不空   例:10+1000
		{
			p3->val = (p2->val+tmp) % 10;  //进位后的余数
			tmp = (p2->val + tmp) / 10;    //保留进位
			p2 = p2->next;                 //指向L2的下一个结点
		}
		else if (p1 != NULL && p2 == NULL)  //L1不空,L2空  例:1000+10
		{
			p3->val = (p1->val + tmp) % 10;
			tmp = (p1->val + tmp) / 10;
			p1 = p1->next;                  //指向L1的下一个结点
		}
		else
		{
			p3->val = (p1->val + p2->val + tmp) % 10;
			tmp = (p1->val + p2->val + tmp) / 10;
			p1 = p1->next;        //指向L1的下一个结点
			p2 = p2->next;        //指向L2的下一个结点
		}
	}

	//tmp==1时,存在最高位进位
	if (tmp == 1)
	{
		newnode = BuyNode();
        //退出循环时,p3->L3的最后一个结点
		p3->next = newnode;
		p3 = p3->next;
		p3->val = 1;
		p3->next = NULL;
	}
	return L3->next;  //返回第一个数据结点
}

图解:

总结一下:

第一次刷力扣,不熟悉这种刷题模式,出错找不到错误在哪儿,审题不清,细节处理不到位,我的我的,下次继续加油!

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值