用python3写反转链表
时间: 2024-09-06 07:03:42 浏览: 48
在Python中,反转链表是一个常见的算法问题,通常在面试中会考查。首先,我们需要定义链表节点的数据结构。一个简单的链表节点类如下:
```python
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
```
然后,我们可以编写一个函数来反转链表。这个函数将遍历原链表,并逐个调整节点指针,直到整个链表被反转。这里提供一个迭代的方法来实现:
```python
def reverseList(head):
prev = None
current = head
while current is not None:
next_temp = current.next # 临时保存当前节点的下一个节点
current.next = prev # 反转当前节点的指针
prev = current # 移动prev和current指针
current = next_temp
return prev # 新链表的头节点
```
这个函数中,我们用三个指针`prev`、`current`和`next_temp`来完成链表的反转。其中`prev`始终指向已经反转好的链表部分的最后一个节点,`current`指向当前正在处理的节点,而`next_temp`是临时保存`current`的下一个节点。
相关问题
递归法python写反转链表伪代码
递归法的反转链表的伪代码如下:
```
def reverse_list(head):
# 如果链表为空或只有一个节点,则直接返回
if head is None or head.next is None:
return head
# 反转后的链表头节点
new_head = reverse_list(head.next)
# 将当前节点的下一个节点的 next 指针指向当前节点
head.next.next = head
# 当前节点的 next 指针置空
head.next = None
return new_head
```
python堆栈反转链表
要在Python中反转链表,可以使用堆栈的方式来实现。下面是一个示例代码:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_list(head):
stack = []
while head:
stack.append(head)
head = head.next
new_head = ListNode()
curr = new_head
while stack:
node = stack.pop()
curr.next = ListNode(node.val)
curr = curr.next
return new_head.next
```
你可以使用该代码来反转一个链表。首先,将链表节点依次压入堆栈中。然后,创建一个新的链表头部节点,并按照堆栈的顺序将节点连接起来。最后返回反转后的链表头部。
注意:这里创建了一个新的链表,并复制了原始链表节点的值。如果需要修改原始链表,请根据实际情况进行相应的修改。
阅读全文