题目描述:
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
解法一:双指针
链表翻转第一反应应该就是两种思路,一种是创建一个新链表把原链表从尾到头重新输入至新链表;另一种是在原链表中把指针方向翻转一下。双指针法实现的就是后者,递归法也是基于此。
说是双指针其实用到了三个指针,有点类似最早写C语言的时候写交换数组位置的步骤,先用一个临时指针记录当前节点位置,然后将当前指针翻转指向前一个节点,之后不断循环这个过程直到链表为空。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
pre = None
cur = head
while cur:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
return pre