2.请设计- -个算法并编程实现:通过-趟遍历,将链表中所有结点的链接方向逆转,且仍利用原表的存储空间。
时间: 2024-10-21 11:17:25 浏览: 34
设计一个简单的算法来逆转链表,可以在一次遍历时完成。这里我们可以借助迭代的方式,同时改变每个节点的next指向,使得原本指向下一个节点现在变成指向前一个节点。
以下是Python的实现:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseList(head: ListNode) -> ListNode:
prev = None
curr = head
# 使用三个指针:prev, curr, 和 next
# 当curr不为空时,不断更新这三个指针
while curr:
next_node = curr.next # 保存当前节点的下一个节点
curr.next = prev # 反转当前节点的指向
prev = curr # 移动prev指针到下一个位置
curr = next_node # 移动curr指针到下一个节点的下一个位置
# 最后返回新的头节点prev,因为原来的头节点变成了最后一个节点
return prev
# 示例链表构造
l1 = ListNode(1, ListNode(2, ListNode(3, ListNode(4))))
print("Original list:")
while l1:
print(l1.val, end=" -> ")
l1 = l1.next
# 反转链表
reversed_list = reverseList(l1)
print("\nReversed list:")
while reversed_list:
print(reversed_list.val, end=" -> ")
reversed_list = reversed_list.next
```
在这个实现中,我们先保存当前节点的下一个节点,然后反转当前节点的指向,并移动指针。最后返回新的头节点,即原来的尾节点。
阅读全文
相关推荐



















