数据结构与算法-链表(力扣附链接)

      之前我们对C语言进行了一定的学习,有了一些基础之后,我们就可以学习一些比较基础的数据结构算法题了。这部分的知识对于我们编程的深入学习非常有用,对于一些基本的算法,我们学习之后,就可以参加一些编程比赛了(蓝桥杯)。

 

 学习前提

  1.至少掌握一门计算机编程语言。

  2.有一定的数学基础和逻辑思考能力。

如好学好数据结构

 1.复习好C语言以及C++的基础知识,尤其是指针这一块的知识,当然使用别的计算机编程语言也可以,你完全可以把本教程提供的代码当作伪代码来学习。

  2.阅读时建议顺序阅读,多思考理解,不要轻易去大量的复制粘贴代码(虽说这也是一个技巧),代码结合图示的学习方法是相当重要的,弄懂原理才是编写代码的基础。

  3.你可以做一些适当的摘抄,虽然有的时候笔记记一次以后不再阅读,但是在写字的时候也是一种加强记忆的过程,笔记的过程就可以加强你的理解。

  希望你不负此行。

                                           好了今天带大家刷几道牛客网上的算法题练练手。

单链表相关经典算法OJ题1:    203. 移除链表元素 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/remove-linked-list-elements/description/

这里给大家提供两个思路:

思路一:遍历原链表,遇见val就删除val节点的操作。

思路二:创建一个新链表,遍历原链表,找不为val的节点,尾插到新链表中。

由于第一个思路,改变指针指向,非常麻烦,我们选用思路二解决问题。

1.首先newnode和newtail都指向头节点

   2. 利用pcur遍历原链表,若节点的值不为val,则尾差到新链表中,newtail往后走一格,如果值为val则不进行尾插。遍历结束应为:

返回newhead即可得到新的链表。

 

typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {ListNode*newhead,*newtail;newhead=newtail=NULL;ListNode*pcur=head;while(pcur){//判断是否为valif(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;
}

 单链表相关经典算法OJ题2:

876. 链表的中间结点 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/middle-of-the-linked-list/description/

思路一:统计链表的节点个数,通过除2得到中间节点。

思路二:快慢指针,慢指针每次走一步,快指针每次走两步,当快指针走到尾节点时,慢指针刚走到中间节点。

快慢指针是一个比较重要的算法技巧,我们应当熟悉掌握这个算法的技巧。 

 

 

 

typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head) {ListNode *slow,*fast;slow=fast=head;while(fast&&fast->next){slow=slow->next;//fast=fast->next->next;//}return slow;
}

 

 

这样就通过了。

单链表相关经典算法OJ题3:

206. 反转链表 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/reverse-linked-list/description/

思路一:创建新链表,遍历原链表的节点将其插入到新的链表中。

思路二:创建三个节点,分别记录前驱节点,当前节点,后继节点,改变原链表指针指向

我们这里采用思路二解题:

 

typedef struct ListNode ListNode;
struct ListNode* reverseList(struct ListNode* head) {if(head==NULL){return head;}//创建三个节点ListNode* n1,*n2,*n3;n1=NULL,n2=head,n3=head->next;//遍历原链表,修改指针的指向ListNode*pcur=head;while(n2){//修改n2的指向n2->next=n1;//修改三个指针的位置n1=n2;n2=n3;if(n3){n3=n3->next;}}return n1;
}

 

好了,今天就分享这些了,感谢大家观看,有问题,随时评论区提问哦。

 

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

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

相关文章

【CV论文精读】【MVDet】Multiview Detection with Feature Perspective Transformation

0.论文摘要 合并多个摄像机视图进行检测减轻了拥挤场景中遮挡的影响。在多视图检测系统中,我们需要回答两个重要问题。首先,我们应该如何从多个视图中聚合线索?第二,我们应该如何从空间上相邻的位置聚集信息?为了解决…

LabVIEW网络测控系统

LabVIEW网络测控系统 介绍了基于LabVIEW的网络测控系统的开发与应用,通过网络技术实现了远程的数据采集、监控和控制。系统采用LabVIEW软件与网络通信技术相结合,提高了系统的灵活性和扩展性,适用于各种工业和科研领域的远程测控需求。 随着…

生成验证码-超简单

引言 在Web开发中,验证码是一种常见的防止恶意破解、自动化提交的有效手段。在Java项目中,我们可以使用Hutool工具库快速实现验证码功能。Hutool是一个Java工具包,它以简洁易用著称,其中包含了验证码模块,可以让我们轻…

今日arXiv最热NLP大模型论文:无需数据集,大模型可通过强化学习与实体环境高效对齐 | ICLR2024

引言:将大型语言模型与环境对齐的挑战 虽然大语言模型(LLMs)在自然语言生成、理解等多项任务中取得了显著成就,但是在面对看起来简单的决策任务时,却常常表现不佳。这个问题的主要原因是大语言模型内嵌的知识与实际环…

在windows的控制台实现贪吃蛇小游戏

欢迎来到博主的文章 博主id:代码小豪 前言:看懂这篇文章需要具有C语言基础,还要对单链表具有一定的理解。如果你只是想要试玩这个游戏,可以直接在文章末尾找到源码 由于实现贪吃蛇需要调用Win32 API函数,这些函数我会…

npm 上传一个自己的应用(4) 更新自己上传到NPM中的工具版本 并进行内容修改

前面 npm 上传一个自己的应用(2) 创建一个JavaScript函数 并发布到NPM 我们讲了将自己写的一个函数发送到npm上 那么 如果我们想到更好的方案 希望对这个方法进行修改呢? 比如 我们这里加一个方法 首先 我们还是要登录npm npm login然后 根据要求填写 Username 用…

【Linux】linux自动化构建工具make/makefile

linux自动化构建工具make/makefile 一,makefile是什么二,如何写makefile三,文件的三个时间属性四,makefile的推导 一,makefile是什么 对于make和makefile,简单来说,make是一个命令,用…

VSCode python插件:找不到自定义包导致语法解析失败

众所周知,在python源码中,我们可以通过 sys.path.append("path-to-lib") 来为python解释器添加自定义包的寻找路径。 但是vscode的默认python插件可没法聪明到根据这句话去找这个包,这就会导致后续代码中使用了这个库的部分无法享…

个人博客搭建(总结)

文章目录 前言个人基础学习经验耗时最终搭配血泪史总结🩸Gitee or GitHub域名-该买还是得买!域名后缀服务器 参考博主碎碎念🙊 前言 本网站目前只搭好了一个大概框架,博主没学过前端,所以会有许多bug和不合理的设置。…

消息中间件:Puslar、Kafka、RabbigMQ、ActiveMQ

消息队列 消息队列:它主要用来暂存生产者生产的消息,供后续其他消费者来消费。 它的功能主要有两个: 暂存(存储)队列(有序:先进先出 从目前互联网应用中使用消息队列的场景来看,…

c入门第十篇——指针入门

一句话来说: 指针就是存储了内存地址值的变量。 在前面讨论传值和传址的时候,我们就已经开始使用了指针来传递地址。 在正式介绍指针之前,我们先来简单了解一下内存。内存可以简单的理解为一排连续的房子的街道,每个房子都有自己的地址&#…

华清作业day56

SQLite特性: 零配置一无需安装和管理配置;储存在单一磁盘文件中的一个完整的数据库;数据库文件可以在不同字节顺序的机器间自由共享;支持数据库大小至2TB;足够小,全部源码大致3万行c代码,250KB…

midnightsun-2018-flitbip:任意地址写

题目下载 启动脚本 启动脚本如下,没开启任何保护 #!/bin/bash qemu-system-x86_64 \-m 128M \-kernel ./bzImage \-initrd ./initrd \-nographic \-monitor /dev/null \-append "nokaslr root/dev/ram rw consolettyS0 oopspanic paneic1 quiet" 2>…

“掌握温度,感知湿度,一触即知!”DHT11温湿度传感器,为您的生活增添一份关怀与精准。#非标协议【下】

“掌握温度,感知湿度,一触即知!”DHT11温湿度传感器,为您的生活增添一份关怀与精准。#非标协议【下】 前言预备知识1.DHT11温湿度传感器初识1.1产品概述1.2与51单片机接线1.3数据传送逻辑和数据格式 2.发送时序检测DHT11温湿度传感…

从零开始手写mmo游戏从框架到爆炸(十一)— 注册与登录

导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客 从这一章开始,我们进入业务的部分,从注册登录开始。 创建注册和登录的路由 package com.loveprogrammer.command.server;public interface Se…

vue 实现一个持续时间定时器组件

vue 实现一个定时器组件 效果图子组件父组件 效果图 子组件 新建一个timer.vue文件 <template><span :class"{red: string > 600}">{{ string | formatDurationS }}</span> </template> <script>export default {name: timer,pro…

【十二】【C++】vector用法的探究

vector类创建对象 /*vector类创建对象*/ #if 1 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std; #include <vector> #include <algorithm> #include <crtdbg.h>class Date {public:Date(int year 1900, int month 1, int …

Mongodb启动为Windows服务开机自启动

注意&#xff1a;mongodb的安装目录不应有中文&#xff0c;如果有&#xff0c;服务启动的路径会出现乱码&#xff0c;导致找不到对应的文件 1.安装好mongoDB 2.创建data目录&#xff0c;并在其中创建db目录和log目录 3.在log目录中创建mongodb.log文件 4.打开cmd&#xff08;用…

(每日持续更新)jdk api之ObjectInputFilter.Status基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

计算机网络基本知识(二)

文章目录 概要分层为什么分层怎么分层&#xff1f;1.实体2.协议3.服务 分层基本原则正式认识分层详细例子解释 总结 概要 分层知识&#xff1a;概念理解 分层 为什么分层 大致以上五点 为了解决上面的问题&#xff08;复杂&#xff09; 大问题划分为小问题 怎么分层&#…