来源:LeetCode
一: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
** 数组要小心别越界
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
#include <stdio.h>
#include <stdlib.h>
int *twoSum(int *nums, int numsSize, int target, int *returnSize)
{
for(int index=0; index<numsSize; ++index){
for(int i=index; i<numsSize; ++i){
if(nums[index] + nums[i] == target){
returnSize[0] = index;
returnSize[1] = i;
return returnSize;
}
}
}
return NULL;
}
int main(int argc, char **argv)
{
int nums[4] = {2, 7, 11, 15};
//int target = atoi(argv[1]);
int target = 9;
int *retArr = (int *)malloc(sizeof(int)*2);
if(NULL == twoSum(nums, 4, target, retArr)){
printf("Not Find Combination!\r\n");
}else{
printf("[%d, %d]\r\n", retArr[0], retArr[1]);
}
free(retArr);
return 0;
}
二:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
**链表使用主要是注意不要泄露内存。
#include <stdio.h>
#include <stdlib.h>
struct ListNode{
int val;
struct ListNode *next;
};
void showList(struct ListNode *head)
{
if(head == NULL)
return;
struct ListNode *node = head;
while(node->next != NULL){
printf("%d --> ", node->val);
node = node->next;
}
printf("%d\r\n", node->val);
}
void delList(struct ListNode *head)
{
struct ListNode *node = head;
while(node != NULL){
node = node->next;
free(head);
head = node;
}
}
struct ListNode *addTwoNumbers(struct ListNode *l1, struct ListNode *l2)
{
struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *node = head;
while(l1 != NULL && l2 != NULL){
node->val = l1->val + l2->val;
node->next= (struct ListNode *)malloc(sizeof(struct ListNode));
l1 = l1->next;
l2 = l2->next;
node = node->next;
}
node = head;
while(node->next->next != NULL)node = node->next;
free(node->next);
node->next = NULL;
return head;
}
int main(int argc, char **argv)
{
struct ListNode *head0 = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *node = head0;
node->val = 0;
for(int index=1; index<10; ++index){
struct ListNode *newNode = (struct ListNode *)malloc(sizeof(struct ListNode));
newNode->val = index;
node->next = newNode;
node = newNode;
}
node->next = NULL;
struct ListNode *head1 = (struct ListNode *)malloc(sizeof(struct ListNode));
node = head1;
node->val = 9;
for(int index=8; index>=0; --index){
struct ListNode *newNode = (struct ListNode *)malloc(sizeof(struct ListNode));
newNode->val = index;
node->next = newNode;
node = newNode;
}
node->next = NULL;
showList(head0);
showList(head1);
struct ListNode *head = addTwoNumbers(head0, head1);
showList(head);
delList(head);
delList(head0);
delList(head1);
return 0;
}