python链表反转
时间: 2023-11-13 17:58:44 浏览: 89
Python链表反转可以使用循环迭代和递归两种方式实现。其中循环迭代需要三个临时变量:pre、head、next,临界条件是链表为None或者链表就只有一个节点。具体实现可以参考以下代码:
```
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
new_head = None
while head:
per = head.next
head.next = new_head
new_head = head
head = per
return new_head
```
这段代码中,我们新建了一个头指针new_head,然后遍历head链表,依次在新的头节点位置插入,达到反转的效果。最后返回一个新的链表。
相关问题
python 链表反转算法
Python中链表反转算法的核心思想是逐个遍历链表中的节点,并将它们指向前一个节点,而不是原来的下一个节点。具体步骤如下:
1. 初始化三个指针,分别命名为`prev`(指向前一个节点,初始为None),`current`(指向当前节点,初始为链表的头节点)和`next`(指向当前节点的下一个节点,初始值为None)。
2. 遍历链表,对于当前节点,首先保存其下一个节点(即`next = current.next`)。
3. 将当前节点的指针指向前一个节点(即`current.next = prev`)。
4. 移动指针,`prev`变为当前节点(即`prev = current`),`current`变为下一个节点(即`current = next`)。
5. 重复步骤2-4,直到`current`为None,这时`prev`就是新的头节点,即反转后的链表。
6. 返回新的头节点。
下面是Python代码实现:
```python
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def reverse_list(head):
prev = None
current = head
while current:
next = current.next # 保存下一个节点
current.next = prev # 反转当前节点的指针
prev = current # 移动prev指针
current = next # 移动current指针
return prev # prev为反转后的头节点
```
python 链表部分反转
链表部分反转是指将链表中某一部分的节点顺序翻转。下面是一个示例代码,可以实现链表部分反转的功能:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_between(head, m, n):
if not head or m == n:
return head
dummy = ListNode(-1)
dummy.next = head
prev = dummy
# 找到需要反转的部分的前一个节点
for _ in range(m - 1):
prev = prev.next
# 开始反转
curr = prev.next
for _ in range(n - m):
next_node = curr.next
curr.next = next_node.next
next_node.next = prev.next
prev.next = next_node
return dummy.next
```
在以上代码中,我们首先创建了一个 `ListNode` 类来表示链表节点。然后定义了 `reverse_between` 函数来实现链表部分反转。函数的参数包括链表的头节点 `head`,需要反转的部分的起始位置 `m` 和结束位置 `n`。
函数内部首先创建了一个虚拟节点 `dummy`,指向头节点 `head`。然后使用 `prev` 指针找到需要反转部分的前一个节点。接下来使用 `curr` 指针从前一个节点开始遍历需要反转的部分,通过修改指针的指向来实现反转。
最后返回虚拟节点的下一个节点作为反转后的链表头节点。
阅读全文