代码如下。
classnode(object ) :def__init_ ) self,elem, next _=none (: self.elem=elem self.next=next _ defreverselist (head ) : if head==noneorhead.next==non 2pre=head#3head=next# 4returnpreif__name_=='__ () ) ) ) 65链表3-2-1-9-noneL1.next=node(2) L1.next (2) elem,l.next.next.next.elem ) http://www.Sina.com/http://www.Sina.com
步骤next=head.next
将head.next指派给next变量。 也就是说,next指向节点2,然后保存节点2。
步骤head.next=pre (初始pre==None ) )。
将pre变量赋给head.next。 也就是说,节点1指向None
步骤pre=head
head被分配给pre。 也就是说,pre指向节点1,并将节点1设置为“上一个节点”
步骤head=next
将next分配给head时,head指向节点2,节点2设置为“头部节点”
————————————————————————————————————————
第一个循环完成,进入第二个循环,如下图所示。
步骤next=head.next
将head.next赋值给next变量。 也就是说,next指向节点3,然后保存节点3。
步骤head.next=pre (此时的pre不再是None ) )。
将pre代入head.next中,当pre在上次循环中指定了节点1时,这一步骤意味着节点2指定节点1,完成第1和第2节点的反转。
步骤pre=head
head被分配给pre。 也就是说,pre指向节点2,并将节点2设置为“上一个节点”
步骤head=next
将next分配给头。 也就是说,head指向节点3。 在这种情况下,节点3被设置为“头部节点”
第二个循环结束了。 我用这个类推! 第三次、第四次、第五次循环。 最后翻转为下图
——33543354————————3——33——33——33——3——3——333——333333——3333333333——333333333——333333——33333——333——333——3——354——33——
)1)帮助内存映射:
)2)必须保存当前头节点的下一个节点) (例如,当前头节点为2,先保存节点3 )。
(3)实现逆转的key point: head.next=pre