📅  最后修改于: 2023-12-03 15:28:45.832000             🧑  作者: Mango
本题是门户网站公司GATE-IT-2004的编程题库中的第73题,题目要求对一个给定的单向链表进行反转。
给定一个单向链表,需要将它反转。具体要求是:
链表节点的定义如下:
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的前驱节点。
本题要求反转单向链表,在不开辟新空间的情况下直接修改原链表。采用递归实现反转链表的方法,具有简洁明了、易于理解等特点。本题考查了程序员对链表的理解和递归的掌握程度,也考察了程序员对具体问题的分析和解决能力。