返回
LeetCode 206:反转链表,再现链表操作的精妙!
闲谈
2023-10-13 23:28:04
LeetCode 206:反转链表
在计算机科学中,链表是一种常用的数据结构,由一系列节点组成,每个节点包含一个值和指向下一个节点的指针。反转链表是指将链表中的节点顺序颠倒过来。这是一个经典的算法问题,也是面试中经常被问到的。
反转链表有两种常见的方法:迭代和递归。
迭代法
迭代法是通过一个循环来反转链表。具体步骤如下:
- 初始化一个当前节点指针cur,指向链表的第一个节点。
- 初始化一个前一个节点指针pre,指向空节点。
- 循环以下步骤,直到cur为null:
- 将cur的next指针指向pre。
- 将pre指针指向cur。
- 将cur指针指向cur的next节点。
经过循环后,pre将指向最后一个节点,而cur将指向null。此时,链表已经反转。
递归法
递归法是通过一个递归函数来反转链表。具体步骤如下:
- 递归函数的参数为一个节点指针head。
- 如果head为null,则返回null。
- 否则,递归调用函数本身,参数为head的next节点。
- 将head的next指针指向递归函数的返回值。
- 将head的next指针指向null。
- 返回head。
经过递归调用后,当head为null时,函数将返回null。此时,链表已经反转。
代码实现
# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_list_iterative(head):
cur = head
pre = None
while cur:
next_node = cur.next
cur.next = pre
pre = cur
cur = next_node
return pre
def reverse_list_recursive(head):
if not head:
return None
new_head = reverse_list_recursive(head.next)
head.next.next = head
head.next = None
return new_head
结语
反转链表是一种经典的算法问题,也是面试中经常被问到的。通过理解迭代和递归两种方法,可以掌握链表反转的精髓。在实际编程中,可以根据具体情况选择合适的方法来反转链表。