
链表
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=next6.对链表每k个结点操作:考虑递归,断开k个结点的片段,操作完后接回7.需要倒序:考虑递归、栈、指针迭代8.处理末尾边原创 2021-12-09 02:10:11 · 873 阅读 · 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 · 255 阅读 · 0 评论 -
138. 复制带随机指针的链表
python中的copy,deepcoy如果没有random指针,只要依次遍历原链表,每次创建一个新节点等于原链表节点,然后依次连接新节点即可完成deepcopy由于random指针,复制新节点时,random指针随机指向任意的原链表节点,而如果该原节点还没有被拷贝,新链表就会指向原链表,使deepcopy失败思路:遍历两次,第一次遍历复制所有节点,同时创建一个哈希表,key为原结点,value为复制的新节点第二次遍历来调整next指针,使用哈希表中的value替换random指向的原节点注意:.原创 2021-12-09 02:01:40 · 490 阅读 · 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 · 655 阅读 · 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 · 357 阅读 · 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 · 520 阅读 · 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 · 290 阅读 · 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 · 379 阅读 · 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 · 399 阅读 · 0 评论 -
83 删除排序链表中的重复元素I,II
83删除排序链表中的重复元素1.双指针,注意边界,链表为[]不存在head.nextclass 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 · 211 阅读 · 0 评论