1.迭代的方法实现单链表翻转
class Node:
def __init__(self,val):
self.head=val
self.next=null
Class Reverse_singlelinklist:
def reverse(self,head):
last_node=None
#1.如果当前列表为空列表,则返回头结点.2.如果已经翻转到最后一个尾节点,则返回尾节点(作为反转得到的新链表的头结点进行返回)
if not head or not(head.next):
return head
while head != None:
#保存当前节点中的下一个节点
head_org_next=head.next
#将当前节点的下一个节点指向自己.(因为反转是从头节点开始的,反转完成后,头结点为尾节点,
#尾节点的下一个节点为None)
head.next=last_node
last_node=head
head=head_org_next
2.递归法实现单链表的反转
递归法的主要思想,从链表的第一个节点开始(作为当前节点),将其插在后续节点反转结果插在当前节点之前即可.
两个考虑的点:
(1)如果当前当列表只有一个头结点(即head的next为空)或者当前列表为空,则返回头结点.
(2)当对单链表的头节点进行后插时(插在头结点之后的剩余节点的反转结果之后)时,需要将头结点的下一个节点置为None.
Class Reverse_singlinklist:
def reverse_linklist(self,head):
if not head or not head.next:
return head
#求取当前节点剩余节点反转结果的头结点
last_node=self.reverse_linklist(head.next)
#将当前节点插在当前节点剩余节点反转结果的后面(即将当前节点作为本次翻转结果的尾节点)
head.next.next=head
#将当前节点作为尾节点时,其next节点为空.同时也释放了原链表中的节点资源.
head.next=None
return last_node