单链表反转-python实现

单链表反转,可以使用 循环递归 两种方式

  • 循环方式
class ListNode:
	def __init__(self, x):
		self.val = x
		self.next = None


def non_recurse(head):
	if head is None or head.next is None:
		return head
	prev = None
	cur = head
	new_head = head
	while cur:
		new_head = cur
		tmp = cur.next
		cur.next = prev
		prev = cur
		cur = tmp
	return new_head



head = ListNode(1)
p1 = ListNode(2)
p2 = ListNode(3)
p3 = ListNode(4)

head.next = p1
p1.next = p2
p2.next = p3
p = non_recurse(head)
while p:
	print(p.val)
	p = p.next

  • 递归方式
    class ListNode:
    	def __init__(self, x):
    		self.val = x
    		self.next = None
    
    
    def recurse(head, new_head):
    	if head is None:
    		return
    	if head.next is None:
    		new_head = head
    	else:
    		new_head = recurse(head.next, new_head)
    		head.next.next = head
    		head.next = None
    	return new_head
    
    
    
    head = ListNode(1)
    p1 = ListNode(2)
    p2 = ListNode(3)
    p3 = ListNode(4)
    
    head.next = p1
    p1.next = p2
    p2.next = p3
    new_head = None
    
    p = recurse(head, new_head)
    while p:
    	print(p.val)
    	p = p.next
    	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值