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

链表oj题1(Leetcode)——移除链表元素,反转链表,链表的中间节点,

链表OJ

  • 一,移除链表元素
    • 1.1分析
    • 1.2代码
  • 二,找到链表的中间节点
    • 2.1分析
    • 2.2代码
  • 三,反转链表
    • 3.1分析
    • 3.2代码
  • 四,找到链表中倒数第k个节点
    • 4.1分析
    • 4.2代码

一,移除链表元素

移除链表元素
在这里插入图片描述

1.1分析

这里的删除要分成两种情况来考虑,因为这个题目给了我们头节点,所以分成头删和非头删。因为要记录下一个节点的位置,所以1我们这里选择新增两个指针方便记录。因为我们已经熟悉了链表所以这代码对我们来说还是很容易的。

1.2代码

struct ListNode* removeElements(struct ListNode* head, int val){struct ListNode* cur=head;struct ListNode* prev=NULL;//遍历链表找满足条件的valwhile(cur){if(cur->val==val){//头删特殊处理if(cur==head){head=cur->next;free(cur);cur=head;}//一般化删除else{prev->next=cur->next;free(cur);cur=prev->next;}}else{prev=cur;cur=cur->next;}}return head;
}

二,找到链表的中间节点

链表的中间节点
在这里插入图片描述

2.1分析

这里要让我们找到中间的节点,我们从题目出发,有个非常巧妙的写法就是快慢指针,我们定义两个指针,慢指针正常一次走一步,而快指针一次走两步,那么当快指针走到结束的时候慢指针就在中间位置了。

2.2代码

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

三,反转链表

反转链表
在这里插入图片描述

3.1分析

创建一个newhead链表,把原链表从左到右一个一个取出来放到newhead中去。

3.2代码

struct ListNode* reverseList(struct ListNode* head){struct ListNode*cur=head;struct ListNode*newhead=NULL;while(cur){struct ListNode*next=cur->next;cur->next=newhead;newhead=cur;cur=next;}return newhead;
}

四,找到链表中倒数第k个节点

牛客——找到链表中倒数第k个节点
在这里插入图片描述

4.1分析

这里我们依旧选择快慢指针。
在这里插入图片描述
我们假设k是3,那么我们定义fast,和slow两个指针,第一让fast先走k下,然后两个指针一起走,那么当fast走到NULL,slow所在的位置就是倒数第k个位置。
在这里插入图片描述

4.2代码

struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {// write code herestruct ListNode*fast=pListHead;struct ListNode*slow=pListHead;while(k--){if(fast==NULL){return NULL;}else {fast=fast->next;}}while(fast){fast=fast->next;slow=slow->next;}return slow;
}
http://www.lryc.cn/news/171022.html

相关文章:

  • 【libuv】与uvgrtrp的_SSIZE_T_定义不同
  • 安卓ROM定制 修改必备常识-----初步了解system系统分区文件夹的基本含义 【二】
  • GPT会统治人类吗
  • win系统环境搭建(六)——Windows安装nginx
  • Java中使用BigDecimal类相除保留两位小数
  • 激光雷达在ADAS测试中的应用与方案
  • malloc与free
  • 计算周包材,日包材用来发送给外围系统
  • R语言柱状图直方图 histogram
  • Linux磁盘管理:最佳实践
  • uni-app:通过三目运算动态增加样式效果(class)
  • API安全
  • 手写一个翻页功能
  • element show-overflow-tooltip 复制
  • 【C语言】指针的进阶(三)—— 模拟实现qsort函数以及指针和数组的笔试题解析
  • Python 图像处理库PIL ImageOps笔记
  • 全球南方《乡村振兴战略下传统村落文化旅游设计》许少辉八一新枝——2023学生开学季辉少许
  • 【C语言】指针的进阶(一)
  • Spring学习(三):MVC
  • 排查disabled问题之谷歌新版本特性
  • 三、开发工具
  • 代码解读:y.view(y.size(0), -1)---tensor张量第一维保持不变,其余维度展平
  • 必示科技赋能广发证券运维数字化实践案例,入选信通院《中国AIOps现状调查报告(2023)》
  • 特斯拉Dojo超算:AI训练平台的自动驾驶与通用人工智能之关键
  • Linux中的一些常用命令
  • VRTK4⭐二.VRTK4的项目基础配置
  • word-doc和docx区别
  • 深度学习-偏导数复习
  • linux之jq命令
  • nginx知识点详解:反向代理+负载均衡+动静分离+高可用集群