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。

    思路

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




  • 相关阅读:
    二分练习题4 查找最接近的元素 题解
    二分练习题5 二分法求函数的零点 题解
    二分练习题3 查找小于x的最大元素 题解
    二分练习题2 查找大于等于x的最小元素 题解
    二分练习题1 查找元素 题解
    code forces 1176 D. Recover it!
    code forces 1173 B. Nauuo and Chess
    code forces 1173 C. Nauuo and Cards
    吴恩达深度学习课程笔记-15
    吴恩达深度学习课程笔记-14
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411601.html
Copyright © 2011-2022 走看看