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 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 代码随想录第四天|24. Swap Nodes in Pairs、19. Remove Nth Node From End of List、160. Intersection of Two Link -> 正文阅读

[数据结构与算法]代码随想录第四天|24. Swap Nodes in Pairs、19. Remove Nth Node From End of List、160. Intersection of Two Link

#Java、#链表、#双指针、#哈希表

一、今日学习链接

? ? ? ? 1、24.?Swap Nodes in Pairs,文章链接,视频链接

? ? ? ? 2、19.?Remove Nth Node From End of List,文章链接,视频链接

? ? ? ? 3、160.?Intersection of Two Linked Lists,文章链接

? ? ? ? 4、142.?Linked List Cycle II,文章链接,视频链接

二 、理论知识

三、解题思路

题号思路相关主题难度
24.?Swap Nodes in Pairs

dummy, dummy.next = head, cur = dummy

while(cur.next != null && cur.next.next != null)(偶数个数、奇数个数,理解什么时候为空)

操作节点在被操作的两两节点之前

记录cue.next, cur.next.next.next(例如第三个节点)

技巧:画图演示,一目了然

链表

两两交换

medium
19.?Remove Nth Node From End of List

方法一:helper method

此题可以用上我们昨天学习的反转链表和删除链表元素,反转后n是正序,指针落在第n个节点之前,删除第n个节点即可,最后再反转过来

方法二:双指针

双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉slow所指向的节点就可以了。->fast移动n+1步,fast、slow再同时移动,当fast为空,slow会停在被删除节点之前。

链表

反转链表

删除链表元素

双指针

medium
160.?Intersection of Two Linked Lists

方法一:HashSet

方法二:快慢指针

链表

哈希表(set)

easy
142.?Linked List Cycle IIHashSet

链表

哈希表(set)

medium
//19.删除链表的倒数第N个节点
//helper method,反转链表->删除第n个节点->再反转回来
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode reversed = reverse(head);
        ListNode dummy = new ListNode(0);
        ListNode prev = dummy;
        dummy.next = reversed;
        ListNode cur = reversed;
        int i=1;
        while(i<n) {
            prev = cur;
            cur = cur.next;
            i++;
        }
        prev.next = cur.next;
        ListNode res = reverse(dummy.next);
        return res;
    }
    public ListNode reverse(ListNode head) {
        ListNode prev = null;
        ListNode cur = head;
        while (cur != null) {
            ListNode temp = cur.next;
            cur.next = prev;
            prev = cur;
            cur = temp;
        }
        return prev;
    }
}
//19.删除链表的倒数第N个节点
//双指针:快慢指针解法
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode fast = dummy;
        ListNode slow = dummy;
        n++;
        while (n-->0 && fast != null) {
            fast = fast.next;
        }
        while (fast != null) {
            fast = fast.next;
            slow = slow.next;
        }
        slow.next = slow.next.next;
        return dummy.next;
    }
}

四、总结????????

? ? ? ?链表问题,比如24.?Swap Nodes in Pairs,指针移动有先后顺序,可以画图来模拟指针移动,否则操作多个指针容易乱。L24非常考察链表基础的一题。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 01:12:58  更:2022-09-30 01:16:20 
 
开发: 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年5日历 -2024/5/19 19:44:48-

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