学习c语言:单链表的应用

一、单链表经典算法

1.1 单链表相关经典算法OJ题1:移除链表元素     

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/remove-linked-list-elements/

在做这道题的时候,采用定义两个指针,然后定义一个临时变量遍历整个链表,如果这个节点的val不等于要删除的值,就再判断头节点是否为空,如果为空插入数据就是使头节点等于未结点等于pcur newhead=newtail=pcur,不为空则将newtail的下一个定位到pcur,再将newtail移到链表未结点。经过这次遍历newtail的next为野指针,需要将它置空。返回头节点。
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {ListNode* newHead,*newTile;newHead=newTile=NULL; ListNode *pcur=head;while(pcur){if(pcur->val!=val){if(newHead==NULL){newHead=newTile=pcur}else{newTile->next=pcur;newTile=newTile->next;}}pcur=pcur->next;}if(newTile){newTile->next=NULL;}return newHead;
}

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

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/reverse-linked-list/先处理特殊情况,如果head等于空直接返回head即可。然后定义三个结构体指针,n1=NULL,n2=head,n3=head->next.遍历整个链表,想要将链表反转就得将n2指向n1......然后遍历整个链表,如果n3不为空则n3=n3->next。使n1等于head,最后返回n1。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/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;while(n2){n2->next=n1;n1=n2;n2=n3;if(n3){n3=n3->next;}}return n1;
}

 1.3 单链表相关经典算法OJ题3:合并两个有序链表

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/merge-two-sorted-lists/先处理特殊情况假如list1==NULL就返回list2,假如list2为空就返回list1,定义两个结构体指针newhead和newtail并创建一个头节点,定义两个结构体指针l1,l2来指向list1和list2,遍历l1和l2都不为空,题目要求升序,如果l1小于l2,就newtail->next=l1,newtail到等于l1,l1移到下一位。遍历由于&& l1和l2都有可能为空判假,所以进行判断如果l1不为空就再尾插l1,否则就尾插l2.最后返回newhead的下一位,因为newhead为头节点。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/typedef struct ListNode ListNode;
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {if(list1==NULL){return list2;}if(list2==NULL){return list1;}ListNode* newhead,*newtail;newhead=newtail=(ListNode*)malloc(sizeof(ListNode));ListNode*l1,*l2;l1=list1;l2=list2;while(l1&&l2){if(l1->val<l2->val){newtail->next=l1;newtail=newtail->next;l1=l1->next;}else{newtail->next=l2;newtail=newtail->next;l2=l2->next;}}if(l1){newtail->next=l1;}if(l2){newtail->next=l2;}ListNode* ret=newhead->next;free(newhead);newhead=newtail=NULL;return ret;
}

1.4 单链表相关经典算法OJ题4:链表的中间结点

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/middle-of-the-linked-list/定义两个结构体指针,slow=fast=head,写一个循环遍历fast和fast->next都不为空,slow走一步,fast走两步。返回slow为链表的中间结点

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
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;}return slow;
}

 1.5 循环链表经典应⽤-环形链表的约瑟夫问题

环形链表的约瑟夫问题_牛客题霸_牛客网编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。。题目来自【牛客题霸】icon-default.png?t=N7T8https://www.nowcoder.com/practice/41c399fdb6004b31a6cbb047c641ed8a

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param n int整型 * @param m int整型 * @return int整型*/typedef struct ListNode ListNode;ListNode* BuyNode(int x){ListNode* newnode=(ListNode*)malloc(sizeof(ListNode));newnode->val=x;newnode->next=NULL;return newnode;}ListNode*createlist(int n){ListNode*phead=BuyNode(1);ListNode*ptail=phead;for(int i=2;i<=n;i++){ptail->next=BuyNode(i);ptail=ptail->next;}ptail->next=phead;return ptail;}
int ysf(int n, int m ) {// write code hereListNode*prev=createlist(n);ListNode*pcur=prev->next;int count=1;while(pcur->next!=pcur){if(count==m){prev->next=pcur->next;free(pcur);pcur=prev->next;count=1;}else{prev=pcur;pcur=pcur->next;count++;}}return pcur->val;
}

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

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

相关文章

Python使用FastAPI提供图片缩略图生成接口

使用pillow的thumbnail生成缩略图时&#xff0c;会保持原图的宽高比&#xff1b;使用的opencv的resize则不会 具体代码如下&#xff1a; #!/usr/bin/env python import re import sys from enum import Enum from io import BytesIO from pathlib import Path from typing im…

【力扣】78.子集(回溯)

这道题主要是用的回溯的方法来做的&#xff0c;我是参考的代码回想录里面的思路来写的。刚开始的话我致力于一定要把这个完整的过程推一遍&#xff0c;不推到底我不死心&#xff0c;感觉用掉了自己很多的时间&#xff0c;但是也算是弄懂了吧&#xff0c;就是弄透还是需要一点时…

网络编程:网络编程基础

一、网络发展 1.TCP/IP两个协议阶段 TCP/IP协议已分成了两个不同的协议&#xff1a; 用来检测网络传输中差错的传输控制协议TCP 专门负责对不同网络进行2互联的互联网协议IP 2.网络体系结构 OSI体系口诀&#xff1a;物链网输会示用 2.1网络体系结构概念 每一层都有自己独…

【数据结构取经之路】快速排序的非递归实现

概述 递归实现快速排序在一些场景下有栈溢出的风险&#xff0c;下面就谈谈如何用非递归的方法实现快速排序。 非递归实现的思想 递归实现与非递归实现快速排序的本质是一致的&#xff0c;效率并不会因为用了非递归实现而有所提升。递归实现快速排序的本质就在于通过递归&…

IP数据报格式

每一行都由32位比特&#xff0c;即4个字节组成&#xff0c;每个格子称为字段或者域。IP数据报由20字节的固定部分和最大40字节的可变部分组成。 总长度 总长度为16个比特&#xff0c;该字段的取值以字节为单位&#xff0c;用来表示IPv4数据报的长度(首部长度数据载荷长度)最大…

批量提取PDF指定区域内容到 Excel 以及根据PDF里面第一页的标题来批量重命名-附思路和代码实现

首先说明下&#xff0c;PDF需要是电子版本的&#xff0c;不能是图片或者无法选中的那种。 需求1&#xff1a;假如我有一批数量比较多的同样格式的PDF电子文档&#xff0c;需要把特定多个区域的数字或者文字提取出来 需求2&#xff1a;我有一批PDF文档&#xff0c;但是文件的名…

springboot269反欺诈平台的建设

反欺诈平台设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装反欺诈平台软件来发挥其高效地信息处…

西门子PLCS7-1200位逻辑指令的使用

1.LAD触点 常开触点的位值为1时&#xff0c;常开触点将闭合&#xff08;ON&#xff09;。位值为0时&#xff0c;常开触点将闭合&#xff08;OFF&#xff09;。 常闭触点的位值为1时&#xff0c;常闭触点将闭合&#xff08;OFF&#xff09;。位值为0时&#xff0c;常闭触点将闭…

产品测试方案:视频接入平台并发性能测试方案和报告(即150路视频并发流媒体服务器模块的性能测试方案和报告)

目 录 一、测试目的&#xff1a; 二、测试方案&#xff1a; 2.1、测试思路 2.2、拓扑图 三、测试环境 3.1 服务器配置 3.2 网络摄像机列表 3.3 测试软件 四、测试流程 4.1 H.264并发测试&#xff1a; 4.1.1老版本srsout3.10并发测试 4.1.2 新版本srsout…

【你也能从零基础学会网站开发】Web建站之javascript入门篇 History对象与Location对象

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 History历史对…

IO复用之select

目录 一.select方法介绍 2.1 select 系统调用的原型 2.2 集合的数据结构 2.2.1 fd_set 结构如下: 2.2.2 关于集合fd_set的解析 2.3 select第一个参数 2.4 select方法之超时时间timeout 2.5 select方法的用法简述及返回值 2.6 如何检测集合中有哪些描述符有事件就绪 三…

Xterminal:未来的终端体验

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 开发环境篇 ✨特色专栏&#xff1a; M…