206. 反转链表

发布时间 2023-10-29 19:16:56作者: Frommoon

题目

  • 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

法一、头插法

class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        new_head = ListNode(0)#创建一个新的头节点
        pre=head#定义一个指针pre指向头
        while pre!=None:#当pre没到链表结尾时循环
            cur=pre.next#把pre的下一个指针赋给指针cur
            pre.next=new_head.next#把新的头节点的next赋给pre的next
            new_head.next=pre#新的头节点的next指向pre
            pre=cur#更新pre
        return new_head.next#返回新的头节点的下一个

法二、迭代(改变箭头方向)

  • cur:当前节点;pre:前驱节点;temp:后驱节点
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        pre = None#首先 pre 指针指向 Null
        cur = head#cur 指针指向 head
        while cur!=None:
            temp = cur.next   # 先把原来cur.next位置存起来
            cur.next = pre#改变链表方向
            pre = cur#更新pre
            cur = temp#更新cur
        return pre