python 链表数据结构,python实现单链表
进入主题描述链表,输入反转链表,然后输出新的链表表头。分析:第一,自由制作链表。
这是一个倒链表,我们想要的是:
因为列表搜索元素只有从头节点开始,所以可以考虑将指针逐个指向前一个元素。
当链表的长度变成无穷大时,每一次求逆都会变成o(n)的复杂度,所以总复杂度为O(n ^ 2)。
这种方法时间复杂度太高!看下一个解决方案。
解决方案详情:循环解决问题:
(1)首先,定义三个指针。左、右和右点分别指向第一、第二和第三节点。
)2)使leftPointer指向天空()反转链表的尾节点):
)3)中间指针指向左侧:
)4)将三个指针同时向后移动一个位置:
)5) midPointer指向左边的点(同步骤3):
)6)将三个指针同时向后移动一个位置(与步骤4相同):
(7)中间指针指向左侧点(与步骤3和5相同):
)8)链表翻转。此时,midPointer指针指向链表的反向头。边界条件:(1)一般上述步骤)2)如果头节点为None,则直接返回None。
)3)如果头节点指向None,反转后不变,直接返回头节点。
详细代码(python(# classlistnode:# def _ init _ _)self,X): #链表结构定义# self . val=X # self . next=nonex=nephead):# pHead当初始链表的头节点if pHead==None: #)为空时,直接返回noneifphead.next==none直接返回头节点(boundary 3)返回pHead #,三个指针leftPointer, midPointer和rightpointerleftpoint=phead #定义leftpointer指向第一个节点(步骤1)和midpointer midpointer指向第一个节点的下一个节点(步骤1)Rightpointer=mid pointer . next # right pointer指向下面的节点)步骤1)left pointer . next=None # shilling left pointer=None:# pointer如果right pointer的指针不为空,则left pointer=mid # mid pointer for mid pointer(步骤3和5), 并且mid pointer=right pointer # mid pointer在指针图像之后移动1位,则右指针6)也向后移动1位,直到右指针=right pointer . next # right pointer(步骤4和6)。 循环完成后,rightpointer指向None,然后(step 7)返回midPointer # midPointer是新链表的头。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。