IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 链表的OJ题练习 -> 正文阅读

[数据结构与算法]链表的OJ题练习

目录

🎃🎃1、给你单链表的头节点?head?,请你反转链表,并返回反转后的链表

🎃🎃2、给你一个链表的头节点?head?和一个整数?val?,请你删除链表中所有满足?Node.val? == val?的节点,并返回?新的头节点。

🎃🎃3、给定一个头结点为?head?的非空单链表,返回链表的中间结点。如果有两个中间结点则返回第二个中间结点。


1、给你单链表的头节点?head?,请你反转链表,并返回反转后的链表。

?

??【OJ链接】反转链表

😵😵【思路】:总体逻辑改变链表地址的指向

①设置prev代表前一个节点?

②设置cur代替头节点进行遍历

③设置next来保存cur指向的下一个节点

核心代码为? next=cur.next;?? cur.next=prev;? ?prev=cur;? ?cur=next;

    public ListNode reverseList(ListNode head) {
             ListNode prev=null;
            ListNode cur=head;
            
            while (cur!=null){
                ListNode next=cur.next;
                cur.next=prev;
                prev=cur;
                cur=next;
            }
            return prev;
        }

2、给你一个链表的头节点?head?和一个整数?val?,请你删除链表中所有满足?Node.val == val?的节点,并返回?新的头节点。

??【OJ链接】移除链表元素

😵😵【思路】:总体逻辑把要删除节点的上一个节点指向的地址更改为要删除节点的下一个节点地址

①设置新节点prev=null放在头结点的前面充当上一个节点

②设置cur=head代表头节点进行遍历并判断cur.val与要删除的val是否相等

③、①cur.val==val的情况下设置新变量next=cur.next实现保存要删除节点cur的下一个节点? ? ? ? ? ? ? ? ? ?cur=next实现cur指的是要删除节点的下一个节点,然后prev.next=cur实现总体逻辑上说? ? ? ? ? ? ?的把要删除节点的上一个节点指向的地址更改为要删除节点的下一个节点地址

? ? ? ?②cur.val!=val的情况下prev=cur;? cur= cur.next;让prev和cur继续遍历

特别注意:空链表情况、头节点也要删除的情况、和链表里元素全部都要删除的情况

    public ListNode removeElements(ListNode head, int val) {
          if (head==null)  return null;//空链表
            ListNode prev = null;
            ListNode cur = head;
            while (cur != null) {
                if (cur.val==val){
                    ListNode next=cur.next;
                    cur = next;
                    if (prev!=null) {
                        prev.next = cur;
                    }
                    
                    if (cur!=null){
                        next=cur.next;
                    }
                }
                else{
                    prev=cur;
                    cur=cur.next;
                }

            }
            if (prev==null) return null;//每一个节点都需要删除
            
            while (head!=null&&head.val==val){//头节点就是要删除的节点
                head=head.next;
            }
            return head;


    }

3、给定一个头结点为?head?的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。

??【OJ链接】链表的中间节点

😵😵【思路】:总体逻辑利用快慢指针,快指针fast走两步慢指针slow走一步,?所以fast走到结?

? ? ? ? ? ? ? ? ? ? ? ? ? ? 尾时slow刚好指向链表的中间节点

    public ListNode middleNode(ListNode head) {
        
            if (head==null) return null;
            ListNode fast=head;
            ListNode slow=head;
            while(fast!=null&&fast.next!=null){//因为fast每次走两步所以要加上fast.next也不为空
                    fast=fast.next.next;
                    slow=slow.next;
                
            }
                return slow;

    }

?完成啦~~~ ~~~

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:57:15  更:2022-02-09 20:57:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:54:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码