链表转置算法概述
链表转置是将一个链表中的节点顺序反转的操作。例如,原始链表为 1 -> 2 -> 3 -> 4 -> NULL,转置后的链表为 4 -> 3 -> 2 -> 1 -> NULL。链表转置是数据结构和算法中的常见问题,常用于面试题或实际开发中的链表操作。
链表转置可以通过迭代或递归两种方式实现。以下将详细介绍这两种方法的实现原理和代码示例。
迭代法实现链表转置
迭代法通过遍历链表并逐个修改节点的指针方向来实现转置。核心思想是维护三个指针:prev、current 和 next,分别表示前一个节点、当前节点和下一个节点。
算法步骤
- 初始化
prev为NULL,current为链表的头节点。 - 遍历链表,每次将
current的next指针指向prev。 - 更新
prev和current为下一个节点,直到current为NULL。 - 最终
prev成为转置后的新头节点。
代码示例
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseList(head: ListNode) -> ListNode:
prev = None
current = head
while current:
next_node = current.next
current.next = prev
prev = current
current = next_node
return prev
复杂度分析
- 时间复杂度:O(n),需要遍历整个链表一次。
- 空间复杂度:O(1),仅使用常数级别的额外空间。
递归法实现链表转置
递归法通过递归调用函数,从链表的尾部开始反转节点。递归法的核心思想是将链表的头节点与剩余部分分开处理,逐步将头节点移动到链表的尾部。
算法步骤
- 递归终止条件:链表为空或只有一个节点,直接返回头节点。
- 递归反转剩余部分的链表。
- 将当前头节点的下一个节点的
next指针指向头
476

被折叠的 条评论
为什么被折叠?



