📜  leetcode 206 python (1)

📅  最后修改于: 2023-12-03 14:43:52.343000             🧑  作者: Mango

LeetCode 206 - Reverse Linked List

LeetCode 206题是一道链表相关的基础题目。本题要求将一个单链表进行翻转,也就是将每个节点的next指针指向它的前一个节点,以此来达到翻转链表的效果。本题解提供了使用Python语言实现该题目的代码。

题目描述

翻转一个单链表。 进阶: 链表可以迭代或递归地反转。你能否两个都实现一遍? 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL

解题思路

题目要求翻转链表,我们可以使用迭代的方式来进行翻转。具体思路如下:

  1. 先将当前节点的下一个节点暂存起来。
  2. 将当前节点的下一个节点指向上一个节点。
  3. 将当前节点设为上一个节点。
  4. 下一轮循环,将暂存的节点设为当前节点。 不断地往下迭代,直到当前节点为空,则翻转完成。最后返回新的头节点即可。
代码实现
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        prev = None
        curr = head
        while curr is not None:
            next_node = curr.next
            curr.next = prev
            prev = curr
            curr = next_node
        return prev
代码解析
  • 第 2 行:定义前面一个节点为 None,此时还没有节点。
  • 第 3 行:定义当前节点为链表的头部,即第一个节点。
  • 第 4 行:进入循环,当当前节点为空时,代表所有节点都已翻转完成,则退出循环。
  • 第 5 行:将当前节点的下一个节点存储起来,目的是防止节点丢失。
  • 第 6 行:当前节点的下一个节点指向前一个节点。
  • 第 7 行:将当前节点设为前一个节点,为下一次循环做准备。
  • 第 8 行:将暂存的节点设为当前节点,继续循环。在下一轮循环中,curr 会变为它原来的下一个节点。
  • 第 9 行:循环结束后返回前一个节点,也就是新的头节点。