LeetCode链表OJ题目 代码+思路分享

news/2024/11/24 13:47:32/

目录

    • 删除有序数组中的重复项
    • 合并两个有序数组
    • 移除链表元素

删除有序数组中的重复项

链接: link
题目描述:
u
题目思路:

本题使用两个指针dst和src一前一后
在这里插入图片描述
相同情况:
如果nums[dst]=nums[src],那么src++
在这里插入图片描述
不相同情况:
此时nums[dst]=nums[src]:
1.我们先让src++
2.接着将nums[dst]=nums[src]
3.src++
在这里插入图片描述
按照此思路依次向后,我们最终会得到这样的一个结果
此时删除后数组的元素个数是dst+1在这里插入图片描述

代码实现:

int removeDuplicates(int* nums, int numsSize)
{int dst = 0;int src = 1;while(src<numsSize){if(nums[dst]==nums[src]){src++;}else{dst++;nums[dst]=nums[src];src++;}}return dst+1;
}

合并两个有序数组

链接: 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 = m+n-1;while(end1>=0&&end2>=0){if(nums2[end2]>nums1[end1]){nums1[end--]=nums2[end2--];}else{nums1[end--]=nums1[end1--];}}while(end2>=0){nums1[end--]=nums2[end2--];}}

移除链表元素

链接: link
题目描述:
在这里插入图片描述
题目思路:

首先我们对这道题的思考是前后两个节点指针,进行删除节点的操作
我们这里设定cur指向的节点是要被删除的节点在这里插入图片描述
1、如果cur->val不是我们所想要删除的节点值,那么就做下面操作:
prev=cur ,cur=cur->next,继续向下遍历链表,寻找我们要删除的那个节点。
在这里插入图片描述
2、如果此时cur->val是我们想要删除的值,我们就要判断prev空指针的问题了,为什么呢?这里解释一下
如果说链表开始头节点就是6,那么头节点就是我们要删除的节点,这里prev就是空指针,就是下面的情况:
在这里插入图片描述
这里我们要做的操作是:cur=head->next,free(head),head = cur删除头节点元素后,将cur赋值成新的头。
3、如果此时cur->val是我们想要删除的值,并且是下面的情况,那么这种就不是空指针问题:
在这里插入图片描述
这里我们需要做的操作就是:prev->next = cur->next,free(cur),cur=prev->next

代码实现:

struct ListNode* removeElements(struct ListNode* head, int val)
{struct ListNode* prev = NULL;struct ListNode* cur = head;while(cur){if(cur->val==val){if(prev!=NULL){prev->next = cur->next;free(cur);cur=prev->next;}else{cur = head->next;free(head);head = cur;}}else{prev=cur;cur=cur->next;}}return head;
}

http://www.ppmy.cn/news/53720.html

相关文章

计算机网络|第二章:应用层

分层体系结构回顾 在本章中&#xff0c;我们学习有关网络应用的原理和实现方面的知识。 我们从定义关键的应用层概念开始&#xff0c;其中包括应用程序所需要的网络服务、客户和服务器、进程和运输层接口。详细考察几种网络应用程序&#xff0c;包括Web、电子邮件、DNS、对等文…

Android 11.0 framework中根据包名设置某个app横屏显示

1.前言 在android11.0的系统rom定制化开发中,在系统中默认是竖屏显示的,但是在内置某些app的时候需要适配横屏显示,所以就需要在启动app的时候,在wms的窗口 中把app的方向调整为横屏显示,接下来就来从wms等相关类中来处理这个功能的实现 2.framework中根据包名设置某个a…

python使用公共api下载狗狗图片

还是直接上代码&#xff1a; import requests import os import json for i in range(1,200): res requests.get("https://dog.ceo/api/breeds/image/random"); print(res.status_code) print(res.text) json2python json.loads(res.text) default_info …

Python模块和包

模块&#xff08;module&#xff09;其实就是py文件&#xff0c;里面定义了一些函数、类、变量等包&#xff08;package&#xff09;是多个模块的聚合体形成的文件夹&#xff0c;里面可以有多个py文件&#xff0c;也可以嵌套文件夹库是参考其他编程语言的说法&#xff0c;是指完…

VSCode 上的 swift 开发配置

安装Xcode和VsCode 在下列网址下载安装即可 VsCode: https://code.visualstudio.com/ Xcode:https://developer.apple.com/xcode/resources/ 或者apptore 打开xcode要求安装的东西都允许安装一下 启用 Swift 语言支持 确保你已经安装了 Xcode 和 VSCode。这是开始运行的最简…

北京 Meetup 预告 | 内含六个话题,满满干货,期待见面!

在春之末尾&#xff0c;夏之开始的5月&#xff0c;响应社区小伙伴们的呼唤&#xff0c;我们泽拓科技将在北京举办线下社区技术交流活动。 此次我们泽拓科技邀请了去哪儿网、ScaleFlux、美团、SphereEx的相关资深专家来分享他们的数据库探索与实践。我们真诚邀请数据库技术社区…

全国各省份影像下载地址(11级别)

安徽省https://pan.baidu.com/s/1fMuWhVZFvSH1UlCGU1bPpA?pwdeasy澳门特别行政区https://pan.baidu.com/s/1aU2D4o2bfeHTJTb6AkUtVA?pwdeasy北京市https://pan.baidu.com/s/1eaNzAWm1pUx_rjhD_wHHhA?pwdeasy福建省百度网盘 请输入提取码甘肃省https://pan.baidu.com/s/1mAqf…

day36—选择题

文章目录 1.下列关于线程的说法错误的是&#xff08;B&#xff09;2.在下列进程的四个特征中&#xff0c;最基本的特征是&#xff08;B&#xff09;3.什么是内存抖动&#xff08;Thrashing&#xff09;&#xff08;A &#xff09;4.假设如下代码中&#xff0c;若t1线程在t2线程…