📌  相关文章
📜  国际空间研究组织 | ISRO CS 2018 |问题 47(1)

📅  最后修改于: 2023-12-03 15:37:16.022000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2018 | 问题 47

本题目是ISRO CS 2018考试中的第47道题目。本题目在数据结构中属于链表操作的基础题目。

题目描述

给定一个单向链表,将链表倒置并返回新链表的头节点。

例如,输入链表为 1->2->3->4->5,倒置后的链表为 5->4->3->2->1

链表节点定义如下:

class Node: 
    def __init__(self, data=None): 
        self.data = data 
        self.next = None
输入格式

输入的是一个链表的头节点。

输出格式

输出为倒置后的链表的头节点。

样例输入
n1 = Node(1) 
n2 = Node(2) 
n3 = Node(3) 
n4 = Node(4) 
n5 = Node(5) 
  
# 建立链表 
n1.next = n2 
n2.next = n3 
n3.next = n4 
n4.next = n5 
  
head = n1 
样例输出
n5 -> n4 -> n3 -> n2 -> n1 -> None
解题思路

倒置链表的方法可以采用迭代法和递归法,本题采用迭代法实现,具体思路如下:

  1. 初始化三个指针prev, cur和next。
  2. 遍历整个链表,直到cur为最后一个节点。
  3. 在每个迭代中,将cur的next设为prev。
  4. 移动prev、cur和next指针使其指向下一个节点。
  5. 将最后的节点作为头节点返回。
参考实现
def reverse_list(head):
    """
    将链表倒置并返回新列表的头节点
    :param head: 链表的头节点
    :return: 倒置后的链表的头节点
    """
    prev = None # 初始化prev指针
    cur = head # 初始化cur指针
    while cur is not None: # 遍历链表
        next = cur.next # 初始化next指针

        # 倒置当前节点
        cur.next = prev 
        
        # 移动指针
        prev = cur
        cur = next
    
    return prev # 返回倒置后的头节点

以上是该问题的Python中的参考实现。