当前位置:实例文章 » 其他实例» [文章]反转链表 (反转整个链表+反转部分链表)

反转链表 (反转整个链表+反转部分链表)

发布人:shili8 发布时间:2024-11-15 17:16 阅读次数:0

**反转链表**
================在数据结构中,链表是一种常见的线性数据结构。链表中的每个元素称为结点(Node),它包含一个值和一个指向下一个结点的引用。在某些情况下,我们需要反转链表,这意味着将原来的最后一个结点变成新的第一个结点,依此类推。

**反转整个链表**
----------------首先,让我们来看一下如何反转整个链表。假设我们有一个单向链表的头指针为 `head`,我们需要反转整个链表。

###代码示例

class Node:
 def __init__(self, value):
 self.value = value self.next = Nonedef reverse_linked_list(head):
 """
 反转整个链表。
 :param head: 链表的头指针 :return: 反转后的链表的头指针 """
 prev = None current = head while current:
 #保存下一个结点 next_node = current.next # 将当前结点反转 current.next = prev # 移动指针 prev = current current = next_node return prev# 测试代码head = Node(1)
head.next = Node(2)
head.next.next = Node(3)

print("原链表:")
while head:
 print(head.value, end=" ")
 head = head.nextnew_head = reverse_linked_list(head)

print("
反转后的链表:")
while new_head:
 print(new_head.value, end=" ")
 new_head = new_head.next


###代码注释* 我们使用一个 `prev` 变量来保存当前结点的前驱结点。
* 我们使用一个 `current` 变量来遍历链表。
* 在每个循环中,我们将当前结点的 `next` 指针设置为 `prev`,这相当于反转了当前结点。
* 然后我们移动指针,更新 `prev` 和 `current` 的值。

**反转部分链表**
----------------现在,让我们来看一下如何反转链表的一部分。假设我们有一个单向链表的头指针为 `head`,我们需要反转从第 `m` 个结点到第 `n` 个结点之间的链表。

###代码示例
def reverse_part_linked_list(head, m, n):
 """
 反转链表的一部分。
 :param head: 链表的头指针 :param m: 开始反转的结点位置(从1 开始)
 :param n: 结束反转的结点位置(从1 开始)
 :return: 反转后的链表的头指针 """
 # 将链表分成三部分:前 m-1 个结点、反转的 m-n+1 个结点和后 n+1 个结点 dummy = Node(0)
 dummy.next = head pre = dummy for i in range(m -1):
 pre = pre.next cur = pre.next # 反转链表的一部分 for _ in range(n - m):
 next_node = cur.next cur.next = next_node.next next_node.next = pre.next pre.next = next_node return dummy.next# 测试代码head = Node(1)
head.next = Node(2)
head.next.next = Node(3)
head.next.next.next = Node(4)
head.next.next.next.next = Node(5)

print("原链表:")
while head:
 print(head.value, end=" ")
 head = head.nextnew_head = reverse_part_linked_list(head,2,4)

print("
反转后的链表:")
while new_head:
 print(new_head.value, end=" ")
 new_head = new_head.next


###代码注释* 我们使用一个 `dummy` 结点来简化边界处理。
* 我们将链表分成三部分:前 m-1 个结点、反转的 m-n+1 个结点和后 n+1 个结点。
* 然后我们反转链表的一部分。

以上就是如何反转整个链表和反转链表的一部分的代码示例和注释。

相关标签:算法链表数据结构
其他信息

其他资源

Top