链表,并返回反转后的链表。
时间: 2024-12-11 15:15:50 浏览: 11
链表是一种线性的数据结构,每个节点包含两个部分:数据域和指针域。数据域存储数据,指针域指向下一个节点,形成了链接。链表可以单向、双向或循环,其中反转链表是一个常见的操作,它会改变节点之间的引用方向,使得原来的头节点变成最后一个节点。
反转链表的过程通常涉及到三个步骤:
1. 创建一个指针,用于保存当前节点和它的前驱节点。
2. 遍历链表,每次迭代都将当前节点的`next`指向前一个节点,然后移动到下一个节点。
3. 当遍历完链表后,原来的尾节点变成了新的头节点。
以下是Python的一个简单示例,展示如何反转单向链表:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseList(head):
prev = None
curr = head
while curr is not None:
temp = curr.next
curr.next = prev
prev = curr
curr = temp
return prev
```
这个函数接受链表的头节点作为输入,返回反转后的链表的头节点。
相关问题
用python反转链表并打印原链表和反转后的链表
在Python中,反转链表是一个常见的链表操作。首先,我们需要创建两个指针,一个当前节点,一个前驱节点。然后我们遍历链表,每次将当前节点的下一个节点赋值给当前节点,同时将当前节点移动到下一个位置,直到遍历完整个链表。最后,我们将前驱节点设为原始头节点,得到的就是反转后的链表。
以下是简单的代码示例:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_list(head):
prev = None
current = head
while current is not None:
# 反转节点的指向
temp = current.next
current.next = prev
# 更新前驱和当前位置
prev = current
current = temp
return prev
# 假设有一个链表
original_list = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5)))))
# 打印原链表
def print_list(head):
while head:
print(head.val, end=" -> ")
head = head.next
print("None")
# 反转链表
reversed_head = reverse_list(original_list)
# 打印反转后的链表
print("Reversed list:")
print_list(reversed_head)
```
运行这个代码,你会看到原链表和反转后的链表的输出结果。
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
要反转一个单链表,可以使用迭代或递归的方法。
1. 迭代方法:
- 初始化三个指针:prev、curr 和 next,分别指向前一个节点、当前节点和下一个节点。
- 遍历链表,每次将当前节点的 next 指针指向前一个节点、 和 next 指针。
- 当遍历整个链表后,将链表的头节点指向 prev,即为反转后的链表。
以下是迭代方法的示例代码:
```python
def reverseList(head): prev = None
curr = head
while curr:
next = curr.next
curr.next = prev
prev = curr
curr = next
return prev
```
2. 递归方法:
- 递归地反转链表的子链表。
- 将当前节点的下一个节点的 next 指针指向当前节点,然后将当前节点的 next 指针置空。
- 返回反转后的链表的头节点。
以下是递归方法的示例代码:
```python
def reverseList(head):
if not head or not head.next:
return head
new_head = reverseList(head.next)
head.next.next = head
head.next = None
return new_head
```
阅读全文