【初阶数据结构】顺序表和链表算法题(上)

news2024/9/23 13:21:41

顺序表和链表算法题

  • 1.顺序表
    • 1.1移除元素
    • 1.2删除有序数组中的重复项
    • 1.3合并两个有序数组
  • 2.链表
    • 2.1移除链表元素
    • 2.2反转链表
    • 2.3链表的中间结点

1.顺序表

1.1移除元素

在这里插入图片描述在这里插入图片描述
注意:返回的是元素个数,while循环不要少了等号

//https://leetcode.cn/problems/remove-element/description///
int removeElement(int* nums, int numsSize, int val) 
{
    int src = 0, dst = 0;
    while (src < numsSize)
    {
        if (num[src] == val)
        {
            src++;
        }
        else {
            nums[dst++] = nums[src++];
            //把src(走的快的值)给dst
        }
    }
    //此时,dst指向的位置就是要返回的有效个数
}

1.2删除有序数组中的重复项

在这里插入图片描述
在这里插入图片描述
题目信息:非严格递增序列,双指针法比较前后两个元素即可

int removeDuplicates(int* nums, int numsSize) {
    int src = 0;
    int dest = 1;
    while (dest < numsSize)
    {
        if (nums[src] != nums[dest])
        {
            src++;
            nums[src] = nums[dest];
        }
        dest++;
    }
    return ++src;
    //因为src是从0开始的,所以需要加1,
    //但又因为,如果后置++,return完之后才++,所以前
}

1.3合并两个有序数组

在这里插入图片描述
在这里插入图片描述

思路:两个指针依次从尾部向前遍历,谁大把谁放到nums1的尾部(若前方开始比较谁小,那需要新建一个数组)
最后出循环的时候l2和l3只可能有一个小于0,若是l2,说明nums2没有遍历完,需要将剩下的元素赋值给nums1—若是l3,则直接返回nums1即可

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
    int l1 = m - 1;
    int l2 = n - 1;
    int l3 = m + n - 1;
    while (l1 >= 0 && l2 >= 0) // 不知道是&&还是||带入试试
    {
        if (nums1[l1] > nums2[l2])
        {
            nums1[l3--] = nums1[l1--];//谁大谁给s1
        }
        else
        {
            //要不l1==l2,yaobul2>l1
            nums1[l3--] = nums2[l2--];
        }
    }
        //跳出while有两种情况:要不L1<0(需要处理),L2<0不用处理
    while (l2 >= 0)
    {
        nums1[l3--] = nums2[l2--];
    }
}

2.链表

2.1移除链表元素

在这里插入图片描述

不是开辟空间的深拷贝,而只是定义了指向同一结点的指针
在最后需要先判断newtail是否为空,否则链表为空链表时会报错.
再将其中的next指针置为空,否则可能会出现循环.

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
//创建一个新链表newnode,把值不为val的值尾插进去
//pcur遍历原链表
typedef struct ListNode ListNode;
ListNode* removeElements(ListNode* head, int val) {
    //创建新链表
    ListNode* newhead = NULL;
    ListNode* newtail = NULL;
    //遍历原链表
    ListNode* pcur = head;
    while (pcur)
    {   
        //找值不为val的节点,往新链表进行尾插 前val相当于data
        if (pcur->val != val) {
            //链表头结点为空
            if (newhead == NULL) {
                newhead = newtail = pcur;
            }
            else {
                //链表头结点不为空
                newtail->next = pcur;
                newtail = newtail->next;
            }
        }
        pcur = pcur->next;
    }
    if (newtail)//防止新链表为空,如果直接下一行就报错
        newtail->next = NULL;
    return newhead;
}

2.2反转链表

在这里插入图片描述
思路
在这里插入图片描述

2.3链表的中间结点

在这里插入图片描述

快慢指针法的应用
注意为偶数时返回第二个节点

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 //快慢指针的应用,快1慢2
typedef struct ListNode ListNode;
ListNode* middleNode(ListNode* head) {
    ListNode* slow, * fast;
    slow = fast = head;
    while (fast && fast->next)//两个都满足才进入循环
    {
        slow = slow->next;
        fast = fast->next->next;
    //此时slow指向的结点刚好就是中间结点
    }
    return slow;
}

思路
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2074472.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何快速轻松地从 iPhone 恢复已删除的照片

回忆和照片很珍贵&#xff0c;我们不能丢失它们&#xff0c;尤其是误丢它们。我们都可能不小心删除了智能手机上的图像。您是否也碰巧误删除了 iPhone 上的图像&#xff1f;或者也许是出于愤怒&#xff0c;后来才后悔&#xff1f; 不用担心&#xff0c;因为您可以快速轻松地恢…

iOS RunLoop

一:什么是Runloop Runloop&#xff0c;正如其名&#xff0c;loop表示某种循环&#xff0c;和run放在一起就表示一直在运行着的循环 二:Runloop的创建? iOS并没有提供Runloop的创建方法,因为创建了现场自然会有一个Runloop. 所以只有获取Runloop的方法: NSRunLoop * runloo…

【能量项链】

题目 错误代码&#xff08;10过7&#xff09; #include <bits/stdc.h> using namespace std; const int N 110; int a[N]; int n; int f[N][N]; int cal(int i, int k, int j) {if(i < k && k < j){return a[i] * a[(k1)%n] * a[(j1)%n];}else if(k <…

显示“ ‘cmd‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。”的解决方法

问题呈现 当我们在执行cmd命令时&#xff0c;若出现不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件的提示。 解决方法 在导航搜索框输入编辑系统环境变量&#xff08;或者右键此电脑&#xff0c;左键属性&#xff0c;左键高级系统设置&#xff0c;左键环境…

常见——算法

一.排序算法 1.冒泡排序 public class Test {public static void main(String[] args) {int []arr{12,34,1,56,44,4,5,55};for (int i 0; i < arr.length-1; i) {for (int j 0; j < arr.length-i-1; j) {int temparr[j1];if(arr[j]>arr[j1]){arr[j1]arr[j];arr[j]t…

langchain入门系列之三 数据连接器的使用

数据连接处理流程 数据加载器结构 数据加载器示例 - CSV LangChain 实现了一个 CSV 加载器&#xff0c;可以将 CSV 文件加载为一系列 Document 对象。CSV 文件的每一行都会被翻译为一个文档。 这里需要自己准备一个csv文件 from langchain_community.document_loaders.csv_l…

【Java】—— Java面向对象基础:在Java中创建和管理员工及其生日信息

目录 定义MyDate类 定义Employee类 创建测试类并测试员工对象 运行结果 总结 在Java中&#xff0c;面向对象编程&#xff08;OOP&#xff09;的核心在于定义类&#xff08;Class&#xff09;和对象&#xff08;Object&#xff09;。本篇文章将通过一个简单的示例来展示如何…

Scrapy 项目部署Scrapyd

什么是Scrapyd Scrapyd 是一个用来管理和运行 Scrapy 爬虫的服务。它允许用户将 Scrapy 项目部署到服务器上&#xff0c;然后通过一个简单的 API 来启动、停止和监控爬虫的运行。Scrapyd 可以帮助简化爬虫的部署过程&#xff0c;使得用户不必手动在服务器上运行爬虫&#xff0c…

单片机原理及技术(八)—— 串行口的工作原理及应用

目录 一、串行通信基础 1.1 并行通信与串行通信 1.1.1 并行通信 1.1.2 串行通信 1.2 同步通信与异步通信 1.3 串行通信的传输模式 二、串行口的结构 2.1 串行口控制寄存器SCON 2.1.1 SM0、SM1 2.1.2 SM2 2.1.3 REN 2.1.4 TB8 2.1.5 RB8 2.1.6 TI 2.1.7 RI 2.2 …

云服务器在媒体处理中的应用有哪些

云服务器在媒体处理中扮演着至关重要的角色&#xff0c;无论是视频流服务、音频转码处理&#xff0c;还是图片优化服务&#xff0c;云服务器都提供了高效、灵活且可扩展的解决方案。以下将详细探讨云服务器在媒体处理中的应用。 首先&#xff0c;云服务器在视频流服务方面发挥着…

python怎么判断大小写

Python提供了isupper()&#xff0c;islower()&#xff0c;istitle()方法用来判断字符串的大小写&#xff0c;具体实例如下&#xff1a; >>> str_1 "HELLO PYTHON" # 全大写 >>> str_2 "Hello PYTHON" # 大小写混合 >>> str_3…

Spring Boot 有哪些优点?

Spring Boot 有哪些优点&#xff1f; &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Spring Boot以其简洁和高效的特点&#xff0c;革新了Java应用的开发和部署方式。以下是其几大核心优势&#xff0c;让你一目了然&#xff1a; 减少时间成…

5000套精美PPT免费分享

目录 部分展示目录 几乎包含各种应用场景的PPT模板 这里只展示部分目录 部分展示目录 ##PPT下载 链接&#xff1a;https://pan.baidu.com/s/1ckvN9xeMR82hL30lHXfJ0g 提取码&#xff1a;ZYNB 点击下载&#xff0c;记得点个赞哦

MAML算法详解

引言&#xff1a;MAML是元学习的经典论文&#xff0c;也是基于optimization based meta-learning方法的开山之作&#xff0c;后序很多工作都是follow这篇工作。目前已经有13140的引用&#xff0c;其算法思想很巧妙&#xff0c;值得反复品读。论文链接&#xff1a;http://procee…

APP备案FAQ--荣耀应用上架(可获得相关资料)

1.常见的接入商有哪些&#xff1f; 目前常见的接入商有&#xff1a;华为云、阿里云、腾讯云。关于如何选择接入商&#xff0c;具体还需要根据您所选择的服务器提供商而定。 2.已完成网站ICP备案还需要进行APP备案吗&#xff1f; 需要。即使您已完成网站ICP备案&#xff0c;仍需…

基于game-based算法的动态频谱访问matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 展示了负载因子P和次级传输功率不同的HPE。 从图中可以看出&#xff0c;随着|hP E|扩大,用户P更好的为二级用户分配更多的…

AI在医学领域:谷歌的HeAR生物声学模型

声学非语义属性的语音可以使机器学习模型执行诸如情绪识别、说话者识别和痴呆检测等副语言任务。脑卒中、帕金森病、阿尔茨海默病、脑瘫和肌萎缩侧索硬化症&#xff08;ALS&#xff09;等脑血管和神经退行性疾病也可以使用非语义语音模式&#xff0c;如发音、共鸣和发声等来检测…

es 7.17.23安装ik插件启动失败,access denied,Permission

情况简述 windows平台&#xff0c;下载了7.17.23的es以及7.17.23的ik分词器的zip包之后&#xff08; 下载地址&#xff08;官方推荐的&#xff09;&#xff1a;Index of: analysis-ik/stable/ &#xff09;&#xff0c;解压该ik的包到es的plugins下&#xff0c;目录结构&…

基于layui实现简单的计分板页面

使用Layui、HTML、CSS练手做了个简单的计分板页面&#xff08;虽然HTML和CSS学的很烂&#xff0c;而且页面尺寸变化时对齐还有问题&#xff09;。布局采用的Layui的栅格系统&#xff0c;同时使用Layui的按钮、弹出层模块设置样式及获取用户输入&#xff0c;同时调用jQuery相关功…

comfyUI使用flux模型报错got promptUsing pytorch attention in VAE,

使用的flux模型如下&#xff0c;应该下载的模型都已经下载好放在正确位置 但是执行之后报错如下 got prompt Using pytorch attention in VAE Using pytorch attention in VAE 然后comfyUI的命令行就强制退出了。 解决方法&#xff1a; 改虚拟内存为系统管理的大小即可