1. 链表两两元素交换

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

    你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

    示例:

    给定 1->2->3->4, 你应该返回 2->1->4->3.

    /**
    * 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
    * <b>你不能只是单纯的改变节点内部的值</b>,而是需要实际的进行节点交换。
    * 解题除了使用递归, 另一种思路就是保证在替换的过程中, 节点不会丢失
    * @param head
    * @return
    */
    public static ListNode swapPairs(ListNode head) {
    if(head == null) {
    return null;
    }
    ListNode result = new ListNode(0);
    result.next = head;
    ListNode cur = result;
    while(cur.next != null && cur.next.next != null) {
    // 第一个节点
    ListNode temp = cur.next;
    // 第二个节点
    ListNode pre = temp.next;
    // 当前节点的下个节点是第二个节点
    cur.next = pre;
    // 第一个节点的下个节点是第三个节点
    temp.next = pre.next;
    // 第二个节点的下个节点是第一个节点
    pre.next = temp;
    // 当前节点等于第一个节点
    cur = temp;
    }
    return result.next;
    }
  2. 环形链表

    给定一个链表,判断链表中是否有环。

    为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

     ```
    /**
    * 给定一个链表,判断链表中是否有环。
    * 1. 龟兔赛跑的方式, 一个一次走两步, 一个一次走一步, 如果相遇说明有环, 否则直到null说明无环
    * 2. 使用set存储数据, 之后遍历, 查找有无相同的节点
    * 两种方案的时间复杂度都是O(n), 空间复杂度第一种会好点
    *
    * 执行用时 :1 ms, 在所有 java 提交中击败了78.04%的用户
    * 内存消耗 :37 MB, 在所有 java 提交中击败了97.08%的用户
    * @param head
    * @return
    */
    public static boolean hasCycle(ListNode head) {
    if(head == null) {
    return false;
    }
    ListNode fast = head;
    ListNode low = head;
    while(fast != null && low != null && fast.next != null) {
    fast = fast.next.next;
    low = low.next;
    if(fast != null && fast.equals(low)) {
    return true;
    }
    }
    return false;
    } /**
    * 执行用时 :6 ms, 在所有 java 提交中击败了25.71%的用户
    * 内存消耗 :38 MB, 在所有 java 提交中击败了94.68%的用户
    * @param head
    * @return
    */
    public static boolean hasCycle1(ListNode head) {
    if(head == null) {
    return false;
    }
    Set set = new HashSet<ListNode>();
    while(head.next != null) {
    set.add(head);
    head = head.next;
    if(set.contains(head)) {
    return true;
    }
    }
    return false;
    }

leetcode - 链表两两元素交换 + 判断链表有无环的更多相关文章

  1. 链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述

    关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学 ...

  2. 数据结构与算法——链表 Linked List(单链表、双向链表、单向环形链表-Josephu 问题)

    链表是有序的列表,但是在内存中存储图下图所示 链表是以 节点 的方式来存储,是 链式存储 每个节点包含 data 域.next 域,指向下一个节点 链表的各个节点 不一定是连续存储,如上图所示 链表还 ...

  3. js 实现数组元素交换位置

    /** * 数组元素交换位置 * @param {array} arr 数组 * @param {number} index1 添加项目的位置 * @param {number} index2 删除项 ...

  4. 【LeetCode】Swap Nodes in Pairs(两两交换链表中的节点)

    这是LeetCode里的第24题. 题目要求: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定1->2->3->4, 你应该返回2->1->4- ...

  5. 【LeetCode题解】24_两两交换链表中的节点(Swap-Nodes-in-Pairs)

    目录 描述 解法一:迭代 思路 Java 实现 Python 实现 复杂度分析 解法二:递归(不满足空间复杂度要求) 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解 ...

  6. 24. 两两交换链表中的节点 leetcode

    题目: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 ...

  7. LeetCode - 24、两两交换链表中的节点

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表.你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 2-> ...

  8. Leetcode 24题 两两交换链表中的节点(Swap Nodes in Pairs))Java语言求解

    题目描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4,你应该返回 ...

  9. Java实现 LeetCode 24 两两交换链表中的节点

    24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3-&g ...

随机推荐

  1. 5.JavaCC官方入门指南-概述

    一.前言   在最开始使用JavaCC的时候,从网上查询了许多资料,但是网上的资料水平是参差不齐的,走了许多弯路,不得已自己查阅了英文版官网文档.令我伤心的是最后我回过头来再看那些博客资料时,发现其实 ...

  2. luoguP1040 加分二叉树

    在做各类DP的时候都要思路清晰! #include<cstdio> #include<algorithm> using namespace std; const int N = ...

  3. [C12] 大规模机器学习(Large Scale Machine Learning)

    大规模机器学习(Large Scale Machine Learning) 大型数据集的学习(Learning With Large Datasets) 如果你回顾一下最近5年或10年的机器学习历史. ...

  4. UVA11374 Airport Express 正反两次最短路

    问题描述 洛谷(有翻译) 吐槽 一道坑题. 如何对待商务票 因为商务票只有一张,所以在\(k\)条边中只有一条边会被选中,很显然,最后这条边会被枚举. 如何选择使用商务票的边 假设我们正在枚举这条边, ...

  5. leetcode279. 完全平方数

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示例 1: 输入: n = 12输出: 3 解释: 12 = ...

  6. go 爬虫

    package main import ( "fmt" "io" "io/ioutil" "net/http" &quo ...

  7. react、less、antd-mobile 报错Inline JavaScript is not enabled. Is it set in your options?

    增加less-loader里面的配置.如图或者降级less到2.x版本

  8. github README.md创建不了

    在项目主页上,点击‘Add a README’按钮,如下图: 进入编辑界面,编辑好内容后,提交按钮的状态为灰化不可点击,如下图: 不知道为什么会出现这种情况,但是我无意中点击了Ctrl+Enter竟然 ...

  9. win7 下docker 镜像加速

    打开 Kitematic 运行 docker cli 注册镜像 https://www.daocloud.io/mirror#accelerator-doc 上有镜像地址 sudo sed -i &q ...

  10. STS 创建 Maven 项目填坑

    用 STS 创建 Maven 项目并不复杂,只是其中有一些坑在里面,我在解决这些坑的时候发现很多人都遇到了相同的问题,因此把创建的步骤记录在这里.所有的步骤不外乎就是一些套路,并没有什么复杂的地方,只 ...