![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
链表
leetcode链表
QxXyY
这个作者很懒,什么都没留下…
展开
-
leetcode链表总结
1.Python暴力解法:可以将链表变成list,对list操作再新建链表 2.多用指针,用dummy(next=head)来处理首结点的边界情况 3.创建链表尾插,颠倒顺序头插 4.对链表的某一段操作:断开之前需要用pre和suc指针保存断开片段前后的结点 5.一般next、cur、pre指针顺次改变顺序,比如倒序next=cur.next,cur.next=pre,pre=next 6.对链表每k个结点操作:考虑递归,断开k个结点的片段,操作完后接回 7.需要倒序:考虑递归、栈、指针迭代 8.处理末尾边原创 2021-12-09 02:10:11 · 844 阅读 · 0 评论 -
86分隔链表,148排序链表,143重排链表,328奇偶链表
86.分隔链表 新建两个链表,一个储存小于x的一个储存大于等于x的结点,然后拼接 class Solution(object): def partition(self, head, x): dummy1=ListNode() dummy2=ListNode() p1,p2=dummy1,dummy2 while head: new=ListNode(head.val) if head.v原创 2021-12-08 01:48:15 · 217 阅读 · 0 评论 -
138. 复制带随机指针的链表
python中的copy,deepcoy 如果没有random指针,只要依次遍历原链表,每次创建一个新节点等于原链表节点,然后依次连接新节点即可完成deepcopy 由于random指针,复制新节点时,random指针随机指向任意的原链表节点,而如果该原节点还没有被拷贝,新链表就会指向原链表,使deepcopy失败 思路:遍历两次,第一次遍历复制所有节点,同时创建一个哈希表,key为原结点,value为复制的新节点 第二次遍历来调整next指针,使用哈希表中的value替换random指向的原节点 注意:.原创 2021-12-09 02:01:40 · 460 阅读 · 0 评论 -
24.两两交换链表中的节点 25.K个一组翻转链表(hard)
24.两两交换链表中的节点 1.分成偶数节点与奇数节点两个链表,拼接(自己的思路) 时间空间复杂度都为O(n)需要额外空间储存链表 class Solution(object): def sampleList(self,head): ###p,p2分别指向奇数节点与偶数节点## dummy=ListNode(next=head) p=dummy dummy2=ListNode(next=head.next) p2=dummy2原创 2021-12-08 01:11:24 · 622 阅读 · 0 评论 -
160.相交链表 234.回文链表
160.相交链表 1.用set()检测是否有重复元素 需要遍历并储存所有元素,时间空间复杂度都为O(n) class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: s=set() while headA: s.add(headA) headA=headA.next whi原创 2021-12-02 19:22:10 · 306 阅读 · 0 评论 -
23.合并k个升序链表(hard)
分治 思想同归并排序,对原list不断二分得到子列表,子列表长度为1或2时停止 对于长度为2的子列表中的两个链表合并(合并两升序链表),不断向上归并 时间复杂度O(nlogn) class Solution: "合并两个升序链表" def mergeTwoLists(self,l1,l2): dummy=ListNode() p=dummy while l1 and l2: s1,s2=l1.val,l2.val .原创 2021-12-07 20:54:22 · 490 阅读 · 0 评论 -
leetcode环形链表141、142
141环形链表 1.最长就10000直接遍历计数,超过10000就是有环。。。。 空间复杂度O(1) class Solution: def hasCycle(self, head: ListNode) -> bool: i=0 while head: i+=1 head=head.next if i>10000: return True原创 2021-12-01 20:58:35 · 261 阅读 · 0 评论 -
206.反转链表 92.翻转链表II
206反转链表 1.转为list反转再新建链表 class Solution: def getlist(self,head): l=[] while head: l.append(head.val) head=head.next return l def initList(self,list): head=ListNode() p=head for原创 2021-12-02 22:03:33 · 336 阅读 · 0 评论 -
leetcode2两数相加 445两数相加II 剑指offer22链表中倒数第k个结点 19删除链表的倒数第 N 个结点
1.链表转list相加再创建一个新链表 空间复杂度O(n),时间复杂度O(n),需要遍历并储存全部的元素 ①遍历两个链表,取出所有元素组成list1,list2 ②对两个list求和: (1)对齐两个list的长度,缺的元素用0补齐 (2)对应元素相加,大于10该结果减10,下一个元素进1,用try语句检测边界(末尾元素进位) ③对求和结果的list创建链表 class Solution: ##遍历链表,返回list#### def travelList(self,L): .原创 2021-12-01 21:53:48 · 375 阅读 · 0 评论 -
83 删除排序链表中的重复元素I,II
83删除排序链表中的重复元素 1.双指针,注意边界,链表为[]不存在head.next class Solution(object): def deleteDuplicates(self, head): """ :type head: ListNode :rtype: ListNode """ if head==None: return head s,f=head,head.ne原创 2021-12-05 02:48:27 · 181 阅读 · 0 评论