如何在Python中通过迭代方法实现单向链表的逆置?请提供完整的 ListNode 类定义和逆置函数 reverse_linked_list 的代码示例。
时间: 2024-12-07 15:24:22 浏览: 18
要实现单向链表的逆置,我们首先需要定义链表节点类`ListNode`,然后编写一个迭代函数`reverse_linked_list`来逆置链表。以下是一个完整的实现示例:
参考资源链接:[Python实现链表逆置](https://wenku.csdn.net/doc/1svcaq6awd?spm=1055.2569.3001.10343)
首先,我们定义链表节点类`ListNode`,它包含两个属性:`val`存储节点值,`next`存储指向下一个节点的引用。同时,提供一个方法`__repr__`以便于打印链表节点的值。
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def __repr__(self):
if self.next:
return f
参考资源链接:[Python实现链表逆置](https://wenku.csdn.net/doc/1svcaq6awd?spm=1055.2569.3001.10343)
相关问题
如何在Python中使用迭代方法实现单向链表的逆置?请结合ListNode类给出具体代码示例。
实现单向链表的逆置是链表操作中的一个常见问题,对于新手来说可能稍具挑战性,但掌握了方法后会发现它其实非常有趣。下面是一个使用迭代方法实现链表逆置的Python代码示例,涉及到了ListNode类以及相关操作。
参考资源链接:[Python实现链表逆置](https://wenku.csdn.net/doc/1svcaq6awd?spm=1055.2569.3001.10343)
首先,我们定义链表节点类`ListNode`如下:
```python
class ListNode:
def __init__(self, value=0, next=None):
self.value = value
self.next = next
```
接着,我们编写一个名为`reverse_linked_list`的函数来实现逆置操作:
```python
def reverse_linked_list(head):
prev = None
current = head
while current:
next_node = current.next # 保存当前节点的下一个节点
current.next = prev # 将当前节点的指针指向前一个节点
prev = current # 前一个节点移动到当前节点
current = next_node # 当前节点移动到下一个节点
return prev # 返回逆置后的链表头节点
```
这个逆置过程主要涉及到三个指针变量:`prev`、`current`和`next_node`。通过迭代遍历链表,依次改变节点的指针方向,最终实现整个链表的逆置。
现在,让我们来创建一个简单的链表,并展示逆置前后的结果:
```python
# 创建链表 1 -> 2 -> 3 -> 4 -> 5
node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(4)
node5 = ListNode(5)
node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node5
# 打印原始链表
def print_list(node):
while node:
print(node.value, end=
参考资源链接:[Python实现链表逆置](https://wenku.csdn.net/doc/1svcaq6awd?spm=1055.2569.3001.10343)
双向链表逆置Java
双向链表逆置(Reversing a Doubly Linked List)是指将双向链表中的节点顺序反转,使得原本的头结点变为原来的尾结点,而尾结点变为了新的头结点。在Java中,我们可以利用迭代或递归的方式实现这个操作。这里提供一个简单的迭代方法:
```java
public class ListNode {
int val;
ListNode prev;
ListNode next;
// 构造函数
ListNode(int val) {
this.val = val;
this.prev = null;
this.next = null;
}
}
public class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) { // 基线条件:空链表或只有一个元素
return head;
}
ListNode current = head; // 初始化当前指针
ListNode temp = null; // 中间辅助指针
while (current != null) { // 循环直到遍历完整个链表
temp = current.prev; // 将temp设置为当前节点的前一个节点
current.prev = current.next; // 更新当前节点的prev指向前一个节点
current.next = temp; // 更新当前节点的next指向temp
// 移动指针到下一个节点
current = current.prev; // 当前节点变成上一个节点
}
// 如果原头结点不是新的头结点,则交换它们
if (temp != null) {
head = temp.prev;
}
return head;
}
}
```
阅读全文