1.迭代算法
算法思路
- 改变指针的指向,初始化两个指针,当前节点curr和前继节点prev
- 遍历整个链表:令当前节点的next指向前一个节点prev =curr.next
- 由于节点没有引用前一个节点的值,所以必须实现存储前一个节点值
- 在更改引用之前还需存储后一个节点,最后返回新的引用
2. 递归
- 终止条件:直至链表的最后一个节点,该节点就是反转链表后的头节点
- 返回值:当前节点的下一个节点的next指针指向当前节点curr.next.next =curr
- 同时让当前节点的next指针指向null
- n1的下一个节点必须指向null
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
// 递归的终止条件
if not head or not head.next:
return head
curr = self.reverseList(head.next)
head.next.next = head
// 防止链表循环
head.next = None
// 每层递归函数都返回curr,即最后一个节点
return curr
代码解析:
- curr =1,2,3,4时,触发reverseList函数
- curr=5时,触发终止条件,函数返回此时head=5
- head.next.next =head 即4.next.next = 4,等于5.next =4