当前位置: 首页 > news >正文

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

目录

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

删除有序数组中的重复项

链接: 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.lryc.cn/news/62634.html

相关文章:

  • 第06讲:为何各大开源框架专宠 SPI 技术?
  • [Unity] No.1 Single单例模式
  • 【chatGPT知识分享】Flutter web 性能优化基础入门
  • 探索Qt折线图之美:一次详尽的多角度解析
  • minio集群部署,4台服务器+1台nginx
  • 实例分割算法BlendMask
  • 多线程、智能指针以及工厂模式
  • 初探 VS Code + Webview
  • Codeforces Round 864 (Div. 2)(A~D)
  • 第3章-运行时数据区
  • delta.io 参数 spark.databricks.delta.replaceWhere.constraintCheck.enabled
  • Redis知识点
  • 经典数据结构之2-3树
  • Numpy从入门到精通——节省内存|通用函数
  • Docker-compose 启动 lnmp 开发环境
  • 《android源码阅读四》Android系统源码整编、单编并运行到虚拟机
  • 深度学习技巧应用8-各种数据类型的加载与处理,并输入神经网络进行训练
  • 【笔试】备战秋招,每日一题|20230415携程研发岗笔试
  • 【unity专题篇】—GUI(IMGUI)思维导图详解
  • 【C++ Metaprogramming】0. 在C++中实现类似C#的泛型类
  • TDA4VM/VH 芯片 NAVSS0
  • 基于springboot的前后端分离的案列(一)
  • Docker网络模式详解
  • PXE高效批量网络装机
  • YOLOv5+双目实现三维跟踪(python)
  • ESP8266使用SDK软硬件定时执行函数
  • ThreadPoolExecutor源码阅读流程图
  • 如何通过筛选高质量爬虫IP提升爬虫效率?
  • C#中定义数组--字符串及数组操作
  • 嵌入式就业怎么样?