leetcode —— 206. 反转链表

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

解法一:迭代法

按顺序遍历链表,对于当前节点,使用临时变量保存其指向的下一个节点,然后将其指向的下一个节点改为其上一个节点,其上一个节点也需要用一个变量进行保存。

### python

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        node = None  # 当前节点的上一个节点
        cur = head  # 当前节点
        while cur:  # 如果当前节点存在
            temp = cur.next  # 用一个临时变量保存当前节点的下一个节点
            cur.next = node  # 更新当前节点的下一个节点
            node = cur  # 用于更新上一个节点的信息
            cur = temp  # 当前节点移动到下一个节点
        return node

解法二:递归法,假设当前节点后面的所有节点都已经翻转完毕,则对于当前节点需要操作两部分:

  1. 将当前节点指向的下一个节点指向当前节点;
  2. 当前节点的下一个节点为None;
# python

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        if not head or not head.next:  # 递归停止条件
            return head
        temp = self.reverseList(head.next)  # 当前节点后面的所有节点都已经翻转完毕,返回翻转链表的头结点
        head.next.next = head  # 当前节点的下一个节点指向当前节点
        head.next = None  # 当前节点的下一个节点为None 
        return temp  # 返回包括当前节点的翻转链表的头结点
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章