<10:l=Node()l.next=Nonel.data=ip.next=lp=li+=1cur=ListNode.next#原始的列表顺序输出while cur is not None:print(cur.data)cur=cur.nextmid=FindMiddleNode(ListNode.next)print(mid.data)#输出中间的元素将两个链表依次合并,现在有一个l1链表a->b->c,还有一个l2链表1->2->3,然后依次合并,此时合并的链表为a->1->b->2->c->3这个步骤是这样的,主要是将l1链表为主链,思想如下图所示:
文章插图
class Node():def __init__(self):self.data=https://www.isolves.com/it/sjk/bk/2020-09-29/Noneself.next=Noneif __name__=="__main__":one_listNode=Node()one_p=one_listNodetwo_listNode = Node()two_p = two_listNodei=1while i<=10:l=Node()l.data=il.next=Noneone_p.next=lone_p=li+=1j=11while j<=20:l=Node()l.data=jl.next=Nonetwo_p.next=ltwo_p=lj+=1one=one_listNode.nexttwo=two_listNode.nexta=Nonewhile one.next is not None:a=one.nextone.next=twoone=aa=two.nexttwo.next=onetwo=aone.next=twon=one_listNode.nextwhile n is not None:print(n.data)n=n.next
找到一个链表的倒数第k个结点我们可以设置两个指针,其中一个指针领先第二个指针k个元素,当第一个指针到链表结尾了,那么第一个指针就是链表的倒数第k个结点 。这个只需要遍历一次链表,所以时间复杂度为O(N)需要注意的是,我们需要时时刻刻地判断这个链表是否长度能够到k,如果本身就没有k个元素,那么倒数第k个元素也是没有意义的
class Node():def __init__(self):self.next=Noneself.data=https://www.isolves.com/it/sjk/bk/2020-09-29/Nonedef FindlastK(list,k):if list is None or list.next is None:returni=0klist=listfirst=list#klist比first领先3个元素while i单链表向右旋转k个位置这个意思是这样的,现在有一个单链表头结点->1->2->3->4->5->6->7,此时我们设置k=3,那么我们希望链表可以变为:头结点->5->6->7->1->2->3->4 。
这个我们可以先找到倒数第k+1个结点slow,以及原始链表的尾结点fast,然后分割为两个链表,然后进行组合就完成了单链表向右旋转k个位置
文章插图
class Node():def __init__(self):self.next=Noneself.data=https://www.isolves.com/it/sjk/bk/2020-09-29/NonedefRotateK(list,K):if list is None or list.next is None:returnslow=list.nextfast=list.nexti=0tmpend=Nonetmpstart=Nonewhile i<=K and fast is not None:fast=fast.nexti+=1if i
【七道经典的关于链表的笔试题目】
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 利用python+opencv获取你的身份证信息
- 五子登科下一句是说的什么 五子登科形容什么
- 手机续航测评 性能好续航强的手机
- 国人开源了一款超好用的 Redis 客户端,真香
- 科迪牛奶为什么味道不一样 科迪纯牛奶为什么比别的香
- 我最爱吃的一道菜 描述你尝过最难吃的一道菜
- 蒙古四大汗国与元朝的关系 元朝为何不去消灭四大汗国
- 朱棣孙子朱瞻基的皇后 朱瞻基废后胡氏
- 辣木茶的功效和作用,辣木茶的功效与作用有哪些
- 荷叶菊花茶的功效,荷叶陈皮菊花茶的功效与作用