python单链表反转_单链表反转-Python实现

算法1(非递归实现):使用3个指针,分别指向前序结点、当前结点和后序结点,遍历链表,逐个逆转,时间复杂度O(n):

def reverse1(head):

if head is None or head.next is None:

return head

current = head

pre = None

pnext = None

while current is not None:

pnext = current.next

current.next = pre

pre = current

current = pnext

return pre

算法2(递归实现): 不断逆转当前结点,直到链表尾端,时间复杂度O(n):

def reverse2(current):

if current.next is None:

return current

pnext = current.next

current.next = None

reversed = reverse2(pnext)

pnext.next = current

return reversed

算法3(递归实现):和算法2类似,不过递归传入当前结点和前序结点,代码可读性要好点,时间复杂度O(n):

def reverse3(current, pre):

if current.next is None:

current.next = pre

return current

else:

pnext = current.next

current.next = pre

return reverse3(pnext, current)

所有完整代码如下:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @File : ReverseSingleLinkImpl.py

class Node:

data = 0

next = None

def build_single_link_list(nodeArr):

head_node = None

next_node = None

for i in nodeArr:

node = Node()

node.data = i

node.next = None

if head_node is None:

head_node = node

next_node = head_node

else:

next_node.next = node

next_node = node

return head_node

def reverse1(head):

if head is None or head.next is None:

return head

current = head

pre = None

pnext = None

while current is not None:

pnext = current.next

current.next = pre

pre = current

current = pnext

return pre

def reverse2(current):

if current.next is None:

return current

pnext = current.next

current.next = None

reversed = reverse2(pnext)

pnext.next = current

return reversed

def reverse3(current, pre):

if current.next is None:

current.next = pre

return current

else:

pnext = current.next

current.next = pre

return reverse3(pnext, current)

if __name__ == '__main__':

head = build_single_link_list([1, 2, 3, 4, 5])

head = reverse1(head)

print("impl1:")

while head is not None:

print(head.data)

head = head.next

print("impl2:")

head = build_single_link_list([1, 2, 3, 4, 5])

head = reverse2(head)

while head is not None:

print(head.data)

head = head.next

print("impl3:")

head = build_single_link_list([1, 2, 3, 4, 5])

head = reverse3(head,None)

while head is not None:

print(head.data)

head = head.next

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值