LC吐血整理之Linkedlist篇

2019-09-25  本文已影响0人  amilyxy

\color{red}{所有题解方法请移步}github-Leecode_summary

206.反转链表

看到一个很有意思的答案

class Solution:
    def reverseList(self, head):
        p, rev = head, None
        while p:
            rev, rev.next, p = p, rev, p.next
        return rev

Tips1: Python的连续赋值
python中可以使用连续赋值的方式来一次为多个变量进行赋值的

>>> x=y=z=1 等价于 x, y, z = 1, 1, 1
# 需注意 如果赋值为列表或者字典
>>> x=y=z=[1,2,3]
>>> a[1] = 4   # x,y,z 都是指向列表的指针 
b = [1,4,3]

Tips2: Python的多元赋值
python的多元赋值原理: tuple的元组封装和序列拆封

>>> t = ‘hello’, ‘amilyxy’, ‘bye’  # 元组封装 (‘hello’, ‘amilyxy’, ‘bye’) 
>>> x, y, z = t     # 序列拆封   要求左侧变量数目与序列元素数目相等
x:'hello' y:'amilyxy' z:'bye'
# 多元赋值变量交换:先将等号右边进行元组封装
>>> x,y,z = z,x,y   # x,y,z = (x:'bye','hello','amilyxy')
x:'bye' y:'hello' z:'amilyxy'   

141.环形链表

其实这个题目我是这样想的,给链表实例对象添加一个属性,记录是否被访问到了 ,但其实本质也是把链表破坏了,有点不太好==
感觉双指针是比较好的解决方法,指针slow每次走一步,指针fast每次走两步,如果他们最终遇上了,就说明链表中有环

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

看看就好,变量太多,不推荐


我的迭代解决方案

328.奇偶链表

刚开始根据数学归纳法找规律,写了很久,奇链表好不容易提取出来了,偶链表就乱了,难,真的难... 然后一直绕在原地操作,题解方法想都没想到,以为是链表就摆在那里了,一点都不能动....
代码在github,多多思考消化~~

92.反转链表II

一开始做的很乱,转了一次之后,后面的就乱套了,然后看了下反转链表I,结合反转链表I做出来了,哎,之前做的都忘掉了....
大致思路:

linked_2.png

21.合并两个有序链表

剑指offer上也出现了这个题,可以掌握两种做法:① 递归方法(代码简洁,当链表过长时不适用)② 迭代方法,都可以写一下熟悉。
今日份的Tips:
递归题解中强调了python的return语句中orand的区别:and 和 or 都有提前截至运算的功能

23.合并k个有序链表

21题的扩展版,按照21题的迭代方法稍微修改一下,运行到130个实例超出时间限制...后来加了一个判断条件还是超时==
今日份的Tips-1:heapq
贴几个知识链接:
1.数据结构-堆,我以前都是把堆栈视为同一个概念,naive啊。
2.Python文档-堆队列算法堆常用来实现优先队列算法,优先队列让你能够以任意顺序添加对象,并随时找出(删除)最小的元素,比min()高效,python中没有堆这个数据结构,但heapq模块提供了堆队列算法的实现,也称为优先队列算法。

138.复制带有随机指针的链表

想清楚操作还是不难的,就是一个指针的指向问题。

上一篇下一篇

猜你喜欢

热点阅读