热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

链表反转算法详解

本文介绍了如何使用双指针和递归方法来实现链表的反转。通过具体的代码示例,帮助读者理解链表反转的基本原理和实现步骤。

链表反转算法


1、双指针法

双指针法是一种常用的链表操作技巧,通过两个指针的配合,可以在遍历链表的过程中逐步完成链表的反转。

struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* current = head;
while (current != nullptr) {
ListNode* nextNode = current->next;
current->next = prev;
prev = current;
current = nextNode;
}
return prev;
}
};

在Python中,同样的逻辑可以通过如下代码实现:

class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def reverseList(self, head):
prev = None
current = head
while current is not None:
next_node = current.next
current.next = prev
prev = current
current = next_node
return prev

2、递归法

递归法是另一种实现链表反转的方法,其核心思想是将问题分解为更小的子问题,直到达到基本情况,然后逐步解决每个子问题,最终完成整个链表的反转。

struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
class Solution {
public:
ListNode* reverseList(ListNode* head) {
return reverse(nullptr, head);
}
private:
ListNode* reverse(ListNode* prev, ListNode* current) {
if (current == nullptr) {
return prev;
}
ListNode* nextNode = current->next;
current->next = prev;
return reverse(current, nextNode);
}
};

同样地,Python中的递归实现如下:

class Solution:
def reverseList(self, head):
def reverse(prev, current):
if current is None:
return prev
next_node = current.next
current.next = prev
return reverse(current, next_node)
return reverse(None, head)

推荐阅读
author-avatar
范二小姐儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有