反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
1.解题思路
方法一:循环迭代(双指针法)
①定义双指针cur和pre,一前一后,另外,由于最后我们会让pre.next = cur实现反转,因此我们还需要一个temp指向pre.next
②令pre.next = cur, cur = pre, pre = temp
③循环的终止条件为pre is None
具体代码如下:
class Solution: def reverseList(self, head: ListNode) -> ListNode: cur = None pre = head while pre: temp = pre.next pre.next = cur cur = pre pre = temp return cur
方法二:递归函数
想象一下,假设我已经有了一个部分反转好的链表,然后我们要利用反转好的这部分链表将这之前的部分也反转过来。
举个栗子:1->2-> 3<-4<-5,后边三个反转好了,那现在就要把2带进来递归。
具体代码如下:
class Solution: def reverseList(self, head: ListNode) -> ListNode: if head is None or head.next is None:return head cur = self.reverseList(head.next) head.next.next = head head.next = None return cur
我看了觉得通俗易懂,于是直接变身拷贝忍者。。
原文:https://www.cnblogs.com/Souriez/p/14652571.html