📅  最后修改于: 2023-12-03 15:12:39.821000             🧑  作者: Mango
本题是 Gate-CS-2002 中的第 35 题,要求编写一个程序来实现链表的倒置。
链表的倒置是一个基本数据结构操作,需要对链表中的每一个节点进行遍历和操作。具体实现可以采用迭代或递归的方式完成。
迭代解法是一个比较直观的方法,可以通过遍历链表并将每个节点的 next
指针反转来实现。
具体实现流程如下:
prev
和 current
,分别指向链表的头节点和第二个节点;next
指针置为 None
,表示新的链表已经开始;current.next
指向 prev
,并更新 prev
和 current
的指针;current
指向倒置后的链表的头节点。具体实现代码:
def reverse_list(head):
prev = None
current = head
while current is not None:
next_node = current.next
current.next = prev
prev = current
current = next_node
return prev
递归解法是另外一种比较巧妙的方法,虽然不太容易想到,但是实现起来比较简单。
具体实现流程如下:
next
指针,使其指向上一个节点;next
指针,返回头节点即可。具体实现代码:
def reverse_list_recursion(head):
if head is None or head.next is None:
return head
new_head = reverse_list_recursion(head.next)
head.next.next = head
head.next = None
return new_head
本题介绍了链表的倒置问题,并给出了迭代和递归两种解法。其中,迭代解法是比较直观和常用的方法,递归解法虽然不太容易想到,但是实现起来比较简单。在实际开发中,我们需要结合具体场景和需求来选择合适的解法实现。