【每日刷题】Day4
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
目录
1. 83. 删除排序链表中的重复元素 - 力扣(LeetCode)
2. 88. 合并两个有序数组 - 力扣(LeetCode)
3. 1768. 交替合并字符串 - 力扣(LeetCode)
1. 83. 删除排序链表中的重复元素 - 力扣(LeetCode)
//主要考察对链表的理解,主体思路就是用一个指针指向头,然后向后遍历寻找相同的,将相同的val后的地址放到当前next中
struct ListNode* deleteDuplicates(struct ListNode* head)
{
if(!head)//考虑NULL指针的可能
{
return head;
}
struct ListNode* pf = head;//指向头指针
while(pf->next)
{
if(pf->val == pf->next->val)//遍历寻找后面相同的val
{
pf->next = pf->next->next;//更改当前next指向的位置
}
else
{
pf = pf->next;找到不相同的后挪动pf指针
}
}
return head;
}
2. 88. 合并两个有序数组 - 力扣(LeetCode)
//暴力求解:使用第三个数组,按照由小到大依次将nums1、nums2中的元素存储,最后再放回nums1中
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
int i = 0;
int j = 0;
int left = 0;
int right = 0;
int nums3[m+n];
while(left<m||right<n)
{
if(left==m)
{
nums3[j++] = nums2[right++];
}
else if(right==n)
{
nums3[j++] = nums1[left++];
}
else if(nums1[left]<nums2[right])
{
nums3[j++] = nums1[left++];
}
else
{
nums3[j++] = nums2[right++];
}
}
for(i = 0;i<j;i++)
{
nums1[i] = nums3[i];
}
}
3. 1768. 交替合并字符串 - 力扣(LeetCode)
//交替存储,注意动态内存开辟时多开辟一个空间存储'\0'
char * mergeAlternately(char * word1, char * word2)
{
int ret1 = strlen(word1);
int ret2 = strlen(word2);
int ret3 = ret1+ret2;
char* s = (char*)malloc((ret3+1)*sizeof(char));
int x = 0;
int y = 0;
int j = 0;
while(word1[x]!='\0'||word2[y]!='\0')
{
if(word1[x]=='\0')
{
s[j++] = word2[y++];
}
else if(word2[y]=='\0')
{
s[j++] = word1[x++];
}
else
{
s[j++] = word1[x++];
s[j++] = word2[y++];
}
}
s[j] = '\0';
return s;
}