python 链表反转

7 篇文章 0 订阅
5 篇文章 0 订阅
class ListNode(object):
    '''定义创建链表节点的类'''
    def __init__(self, val, next = None):
        self.val = val
        self.next = next

#方法一:递归实现
def resverse_linked_list(head):
    if not head:
        return head
    if not head.next:
        return head
    head_node = resverse_linked_list(head.next)
    head.next.next = head
    head.next = None
    return head_node

#方法二:栈实现。先把所有节点入栈,然后弹出第一个便是新的头指针,最后依次弹出并连接
def resverse_linked_list_stack(head):
    stack = [None]
    while head:
        stack.append(head)
        head = head.next
    head = stack.pop()
    cur = head
    while stack:
        cur.next = stack.pop()
        cur = cur.next
    return head

 

解析:

ListNode类不多说,Python实现链表的常用形式。重点关注reverseList( )函数的实现过程。

1.首先函数进入开头的两个if语句,分别是用来判断当前节点和下一个节点是否为NULL,尤其是第二个,在后面递归过程中也会用到。

2.然后开始进入递归,注意传给 self.reverseList( ) 的参数为 head.next ,也就是说链表的会一直往后传递,直到找到最后一个节点(也就是head.val == 5的节点,后文简述为节点5)。此时,因为不满足第二个if语句,返回节点5。

我们可以在第二个if语句中加入一行print( head.val ) ,这样可以更容易看出返回的内容。

3.函数在第二步返回到递归的上一层,headNode 等于返回的节点5 , 也就是节点5作为反转的链表头,完成反转的第一步。

4. 当前节点head为节点4 , head.next指向节点5, head.next.next指向None。 head.next.next= head 让原来指向None的节点5,改为指向节点4,完成了5—>None到5—>4的反转;然后head.next = None , 作用在于截断节点4到节点5的指针,避免形成4—>5—>4的环。

5.同理,返回上一层,当前节点head为节点3,让节点4指向节点3,再截断节点3到节点4的指针。

6.如此重复,直到反转所有节点,headNode即为反转后的链表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值