📅  最后修改于: 2023-12-03 15:28:38.636000             🧑  作者: Mango
本篇文章将向程序员介绍 GATE CS 2020 的问题 9。该问题涉及反转链表中的一些基本操作和技巧。下面将逐步展开介绍。
给出一个单向链表,每个节点包含一个整型值以及一个指向下一个节点的指针。
要求实现一个函数,它可以将链表中的每个节点都反转,并返回反转后的链表的首节点。
节点结构体定义如下:
struct Node {
int value;
struct Node* next;
};
要逆转链表中的每一个节点,需要至少需要三个指针:一个指向当前节点、一个指向当前节点的前一个节点,以及一个指向当前节点的后一个节点。
第一步是创建三个指针:当前节点 p
、前一个节点 prev
和后一个节点 next
:
struct Node* p = head;
struct Node* prev = NULL;
struct Node* next = NULL;
我们需要遍历整个链表,将每个节点的 next
指针指向其前一个节点。
while (p != NULL) {
next = p->next;
p->next = prev;
prev = p;
p = next;
}
head = prev;
注意,最后我们将链表的头节点指向最后一个节点,以保证反转后的链表正确。
下面给出完整的代码实现。注意,该代码片段采用了C语言语法,使用前请注意调整。
struct Node* reverseLinkedList(struct Node* head) {
if (head == NULL || head->next == NULL) {
return head;
}
struct Node* p = head;
struct Node* prev = NULL;
struct Node* next = NULL;
while (p != NULL) {
next = p->next;
p->next = prev;
prev = p;
p = next;
}
head = prev;
return head;
}
这篇文章介绍了 GATE CS 2020 的问题 9,详细讲解了逆转链表的基本操作和技巧。请注意,这里的代码示例仅作为参考,可根据需要进行调整。