给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
解题思路
方法一:迭代法
1.迭代需要三个指针,pre,cur,nxt,分别按顺序指向三个节点
2.三个指针的初始化:pre指向空节点,cur指向头结点head,nxt指向head.next
3.迭代过程:nxt指向cur.next、cur.next指向pre、pre移动到cur位置、cur移动到nxt位置
4.当cur为空时,返回pre
代码
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
pre, cur = None, head
while cur:
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
return pre
时间复杂度:O(n)
空间复杂度:O(1)
方法二:递归法
1.递归上来就先写终止条件:如果head为空或者head.next为空,返回head
2.新头结点newHead指向尾结点,此处进入递归,递归一直遍历到尾节点时才会返回
3.每一层递归,该层递归中的head会让下一个节点指向自己,head.next.next=head;然后head自己指向空。以此达到反转的目的
4.返回新链表的头结点newHead
代码
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
newHead = self.reverseList(head.next)
head.next.next = head
head.next = None
return newHead
时间复杂度:O(n)
空间复杂度:O(n)