题目:反转一个单链表
例如:
输入: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
关键部分图解: