链表的反转python(数据结构与算法)

题目:反转一个单链表

例如:

输入:2,3,4,5,None

输出:5,4,3,2,None

方法一双指针

步骤:1首先使用两个指针分别指向链表第一个和第二个位置,第二指针nxt保存第二个位置,并建立为None的result,

步骤2,将一个元素指向result,(result的起始值为None),将result(current保存了第一个元素的位置)和curren(nxt已经保存了第二个元素的位置)向后移动,完成一次调整,

下图为,上面指针向后移动后,第二次循环。

实现代码:

 

def reverse(lst):
    head = lst.head
    result = None
    current = head.next
    nxt = None
    while current is not None:
        nxt = current.next
        current.next = result
        result = current
        current = nxt
    head.next = result
    

 方法二:递归
链接:https://leetcode-cn.com/problems/reverse-linked-list/solution/dong-hua-yan-shi-206-fan-zhuan-lian-biao-by-user74/
来源:力扣(LeetCode)

def reverseList(self, head):
		"""
		:type head: ListNode
		:rtype: ListNode
		"""
		# 递归终止条件是当前为空,或者下一个节点为空
		if(head==None or head.next==None):
			return head
		# 这里的cur就是最后一个节点
		cur = self.reverseList(head.next)
		# 这里请配合动画演示理解
		# 如果链表是 2->3->4->5,那么此时的cur就是5
		# 而head是4,head的下一个是5,下下一个是空
		# 所以head.next.next 就是5->4
		head.next.next = head
		# 防止链表循环,需要将head.next设置为空
		head.next = None
		# 每层递归函数都返回cur,也就是最后一个节点
		return cur

关键部分图解: 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值