Python实现单链表翻转

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
        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值