📅  最后修改于: 2023-12-03 14:57:48.015000             🧑  作者: Mango
GATE(Graduate Aptitude Test in Engineering,工程硕士研究生能力入学考试)是印度国家技术学院联合会(Indian Institute of Science and seven Indian Institutes of Technology)主持的全印度性的研究生资格考试。GATE IT 2006 是 GATE 的一部分,专门测试计算机科学与信息技术方面的能力。问题5 主要测试程序员在数据结构和算法方面的掌握程度。
给定一个单链表,每个节点包含一个整数值和一个指向下一个节点的指针。请编写一个函数 reverse(),将链表中的节点顺序反转。
例如,给定链表1- > 2- > 3- > 4- > 5,反转后变为5- > 4- > 3- > 2- > 1。
反转链表可以通过迭代或递归实现。
迭代法是通过从头到尾遍历链表,同时反转每个节点的指针,直到遍历到链表末尾,即可完成链表的反转。
以下是迭代法反转链表的代码实现:
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
prev = None
cur = head
while cur:
next_node = cur.next
cur.next = prev
prev = cur
cur = next_node
return prev
递归法则是先递归调用反转函数,将当前节点的下一个节点反转,然后再将自己作为下一个节点的 next 指针返回。需要注意的是最后一个节点的 next 指针需要设为空。
以下是递归法反转链表的代码实现:
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
new_head = self.reverseList(head.next)
head.next.next = head
head.next = None
return new_head
本文介绍了如何通过迭代和递归两种方法实现反转链表。程序员在解决这个问题时,需要对链表数据结构进行基本的操作,例如节点的新增、删除、移动和指向等,同时要考虑到时间和空间复杂度的问题。