📜  门| GATE-IT-2004 |第 73 题(1)

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

题目介绍

本题是门户网站公司GATE-IT-2004的编程题库中的第73题,题目要求对一个给定的单向链表进行反转。

题目详情

给定一个单向链表,需要将它反转。具体要求是:

  1. 需要返回反转后的链表。
  2. 不能使用额外的空间,即不能创建新的链表节点,需要在原链表上直接进行修改。
  3. 不能改变节点中存储的数据。
  4. 链表的长度为不超过 $10^4$。

链表节点的定义如下:

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(nullptr) {}
};

代码示例

以下是本题的C++代码示例,用于反转单向链表:

ListNode* reverseList(ListNode* head) {
    if (head == nullptr || head->next == nullptr) {
        return head;
    }
    ListNode* newHead = reverseList(head->next);
    head->next->next = head;
    head->next = nullptr;
    return newHead;
}

其中,函数reverseList的参数head是指向链表头节点的指针,返回值是反转后的链表头节点的指针。如果链表为空或只有一个节点,那么链表不需要进行反转,直接返回head即可。

采用递归实现反转链表的方法。对于链表节点p,先反转其后续的节点,得到newHead,然后将p放到newHead所代表的链表的末尾,即将p的next指针指向nullptr,newHead即为p的前驱节点。

总结

本题要求反转单向链表,在不开辟新空间的情况下直接修改原链表。采用递归实现反转链表的方法,具有简洁明了、易于理解等特点。本题考查了程序员对链表的理解和递归的掌握程度,也考察了程序员对具体问题的分析和解决能力。