zoukankan      html  css  js  c++  java
  • lintcode 刷题 by python 部分链表题总结(2)

       

            本篇博客对最近做的链表的算法题做个简单的小结,主要描述题目和提供解题思路,具体代码见我的 github:https://github.com/MUSK1881/lintcode-by-python


    36. 翻转链表 II(中等)

    描述

    翻转链表中第m个节点到第n个节点的部分

    样例

    给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4->3->2->5->null

    思路

    新建链表头,在第 m 个节点前打断,在第 n 个节点后打断,翻转 第 m 个节点到第 n 个节点的链表,然后按照题目要求拼接所有链表。

    96. 链表划分(容易)

    描述

    给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。

    你应该保留两部分内链表节点原有的相对顺序。

    样例

    给定链表1->4->3->2->5->2->null,并且 x=3

    返回1->2->2->4->3->5->null

    思路

    题目比较简单。

    98. 链表排序(中等)

    描述

    在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序。

    样例

    给出 1->3->2->null,给它排序变成 1->2->3->null.

    思路

    用归并排序或者快读排序实现 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序。

    99. 重排链表(中等)

    描述

    给定一个单链表L: L0→L1→…→Ln-1→Ln,

    重新排列后为:L0→Ln→L1→Ln-1→L2→Ln-2→…

    必须在不改变节点值的情况下进行原地操作。

    样例

    给出链表 1->2->3->4->null,重新排列后为1->4->2->3->null。

    思路

    找到原始链表中点,划分为两个链表,将后面的那个链表转置,再逐个插入前面的链表中。

    102. 带环链表(中等)

    描述

    给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数,判断它是否有环。

    样例

    给出 -21->10->4->5, tail connectsto node index 1,返回 true

    思路

    设置两个快慢指针,快指针追上慢指针了就说明闭环啦。

    170. 旋转链表(中等)

    描述

    给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数

    样例

    给出链表1->2->3->4->5->null和k=2

    返回4->5->1->2->3->null

    思路

    在旋转点打断,在重新拼接,注意套圈情况,取余数作为移动步数。

    173. 链表插入排序(容易)

    描述

    用插入排序对链表排序

    样例

    Given 1->3->2->0->null, return0->1->2->3->null

    思路

    将链表分成两部分,左边排好顺序,右边从头取值插到左边合适的位置。

    174. 删除链表中倒数第n个节点(容易)

    描述

    给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。

    样例

    给出链表1->2->3->4->5->null和 n = 2.

    删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.

    思路

    比较简单。

    380. 两个链表的交叉(中等)

    描述

    请写一个程序,找到两个单链表最开始的交叉节点。

    样例

    下列两个链表:

    A:         a1 → a2

                       ↘

                         c1 → c2 → c3

                       ↗           

    B:    b1 → b2 → b3

           在节点 c1 开始交叉。

    思路

    计算两个链表的长度差,让长的链表先走 gap 的长度,然后遍历看能不能指向交叉节点。

    451. 两两交换链表中的节点

    描述

    给一个链表,两两交换其中的节点,然后返回交换后的链表。

    样例

    给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。

    思路

    如果只是交换节点的值比较简单,如果两两交换链表节点的指向稍微麻烦点。




  • 相关阅读:
    RESTFUL 设计风格
    GET与POST的区别
    pycharm 对数据库进行可视化操作
    ORM 的基本操作
    pycharm 直接删掉数据表之后,makemigration和migrate 之后,数据库中依然没有生成数据表的问题
    DOM
    BOM对象
    JavaScript
    traversal child window of parent window
    tkinter threading unblock GUI ( check if the thread exists)
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411601.html
Copyright © 2011-2022 走看看