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. MIPI CSI2学习(一):说一说MIPI CSI2

    1. MIPI CSI2简介 MIPI联盟是一个开放的会员制组织.2003年7月,由美国德州仪器(TI).意法半导体(ST).英国ARM和芬兰诺基亚(Nokia)4家公司共同成立.MIPI联盟旨在推进 ...

  2. fiddler---Fiddler修改数据信息

    在测试的过程中,可能我们会遇到需要修改一些数据查看请求返回内容是如何的,刚好Fiddler也可以满足我们的要求,Fiddler不仅可以抓包还可以修改包的内容 Fiddler修改数据原理 Fiddler ...

  3. 【hdu3311】Dig The Wells(斯坦纳树+dp)

    传送门 题意: 给出\(n\)个重要点,还有其余\(m\)个点,\(p\)条边. 现在要在这\(n+m\)个点中挖几口水井,每个地方的费用为\(w_i\).连接边也有费用. 问使得这\(n\)个地点都 ...

  4. 【cf995】F. Cowmpany Cowmpensation(拉格朗日插值)

    传送门 题意: 给出一颗树,每个结点有取值范围\([1,D]\). 现在有限制条件:对于一个子树,根节点的取值要大于等于子数内各结点的取值. 问有多少种取值方案. 思路: 手画一下发现,对于一颗大小为 ...

  5. ar 归档

    ar的常用用法见正文. 1.创建库文件 我 不知道怎么创建一个空的库文件.好在这个功能好像不是很需要.通常人们使用“ar cru liba.a a.o"这样的命令来创建一个库并把a.o添加进 ...

  6. C++中各种输入函数的用法总结

    1.scanf()函数 原型:int scanf(const char *restrict format,......); 入口参数:第一个参数是格式字符串,它指定了输入的格式,......格式化后的 ...

  7. 2.git的 分支管理

    一般我们进行提交的时候.都是在master上面提交的. git status 查看当前分支. [root@localhost jenkins_git]# git branch about * mast ...

  8. [C4W2] Convolutional Neural Networks - Deep convolutional models: case studies

    第二周 深度卷积网络:实例探究(Deep convolutional models: case studies) 为什么要进行实例探究?(Why look at case studies?) 这周我们 ...

  9. idea多模块项目打开RunDashBoard(十)

    在使用spring cloud微服务时,多个服务可以以多个独立子模块(module)的形式放在一个project里面,当服务过多时,一个个启动往往不是很方便,idea有一个贴心的RunDashBoar ...

  10. mybatis之<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=""></trim>

    1.<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=&quo ...