admin 管理员组

文章数量: 1087135


2024年3月22日发(作者:timespan翻译)

python链表反转讲解

链表是一种常见的数据结构,在Python中可以使用类来表示

链表。每个节点表示一个元素,并包含指向下一个节点的指针。

链表的反转指的是将链表的指针方向颠倒,即原本指向下一个

节点的指针反向指向上一个节点。

下面是一个示例链表的定义:

```python

class ListNode:

def __init__(self, value):

= value

= None

```

假设我们有一个链表:1 -> 2 -> 3 -> 4 -> None,现在要对其进

行反转。

方法一:迭代法

迭代法是通过遍历链表,逐个改变指针的指向来实现反转的。

首先,定义一个指向当前节点的指针cur,一个指向前一个节

点的指针prev,一个指向下一个节点的指针next。

1. 初始化cur为链表的头节点,prev和next为None。

2. 遍历链表,将cur的指针指向prev,然后prev和cur都向后

移动一位,即prev = cur,cur = next。

3. 重复步骤2,直到cur为None,此时链表已经反转完毕,

prev指向新的头节点。

4. 返回prev作为新的链表头节点。

下面是具体的实现代码:

```python

def reverse_list(head):

cur = head

prev = None

while cur:

next =

= prev

prev = cur

cur = next

return prev

```

方法二:递归法

递归法是通过递归调用自身来实现反转的。

1. 基线条件:如果链表为空或者只有一个节点,直接返回

head。

2. 递归调用:将原链表的后续节点传入递归函数,得到反转后

的链表。然后将原链表的头节点追加到反转后的链表的末尾,

即 = head,同时将原链表的头节点的next指针

置为空,防止形成循环链表。

3. 返回反转后的链表。

下面是具体的实现代码:

```python

def reverse_list(head):

if not head or not :

return head

new_head = reverse_list()

= head

= None

return new_head

```

以上就是两种常用的反转链表的方法,在实际应用中可以根据

场景选择合适的方法。


本文标签: 链表 节点 指向 反转 指针