西部数码网站管理助手 数据库,两学一做专题网站用途,腾讯会议收费,三合一网站建设多少钱目录 删除有序数组中的重复项合并两个有序数组移除链表元素 删除有序数组中的重复项
链接: link 题目描述#xff1a; 题目思路#xff1a; 本题使用两个指针dst和src一前一后 相同情况#xff1a; 如果nums[dst]nums[src]#xff0c;那么src 不相同情况#xff1a; 此… 目录 删除有序数组中的重复项合并两个有序数组移除链表元素 删除有序数组中的重复项
链接: link 题目描述 题目思路 本题使用两个指针dst和src一前一后 相同情况 如果nums[dst]nums[src]那么src 不相同情况 此时nums[dst]nums[src] 1.我们先让src 2.接着将nums[dst]nums[src] 3.src 按照此思路依次向后我们最终会得到这样的一个结果 此时删除后数组的元素个数是dst1 代码实现
int removeDuplicates(int* nums, int numsSize)
{int dst 0;int src 1;while(srcnumsSize){if(nums[dst]nums[src]){src;}else{dst;nums[dst]nums[src];src;}}return dst1;
}合并两个有序数组
链接: link 题目描述 题目思路 end1和end2指向的元素进行对比将值最大的元素放在end指向的位置如果end1的元素最大则end1–end–如果end2的元素最大则end2–end–。 进行第一次对比结果如下 第二次 第三次 这里是第二个数组走到了最后所以说数组就成功合并结束。 如果是第二个数组没有走到最后呢 如果第二个数组剩余元素那么直接将第二个数组的元素依次放在第一个数组相应的位置完成合并。 代码实现
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{int end1 m-1;int end2 n-1;int end mn-1;while(end10end20){if(nums2[end2]nums1[end1]){nums1[end--]nums2[end2--];}else{nums1[end--]nums1[end1--];}}while(end20){nums1[end--]nums2[end2--];}}移除链表元素
链接: link 题目描述 题目思路 首先我们对这道题的思考是前后两个节点指针进行删除节点的操作 我们这里设定cur指向的节点是要被删除的节点 1、如果cur-val不是我们所想要删除的节点值那么就做下面操作 prevcur curcur-next继续向下遍历链表寻找我们要删除的那个节点。 2、如果此时cur-val是我们想要删除的值我们就要判断prev空指针的问题了为什么呢这里解释一下 如果说链表开始头节点就是6那么头节点就是我们要删除的节点这里prev就是空指针就是下面的情况 这里我们要做的操作是curhead-nextfree(head)head cur删除头节点元素后将cur赋值成新的头。 3、如果此时cur-val是我们想要删除的值并且是下面的情况那么这种就不是空指针问题 这里我们需要做的操作就是prev-next cur-nextfree(cur)curprev-next 代码实现
struct ListNode* removeElements(struct ListNode* head, int val)
{struct ListNode* prev NULL;struct ListNode* cur head;while(cur){if(cur-valval){if(prev!NULL){prev-next cur-next;free(cur);curprev-next;}else{cur head-next;free(head);head cur;}}else{prevcur;curcur-next;}}return head;
}