📅  最后修改于: 2023-12-03 15:11:17.913000             🧑  作者: Mango
使用链表是一种比较常见的数据结构。我们可以使用链表来存储一组数据,其中每个节点记录一个数据元素。在某些情况下,需要从链表中获取特定位置的节点。本文将介绍如何编写 C 程序来获取链表中的第 N 个节点。
在 C 语言中,链表节点可以定义为一个结构体,其中包含两个主要部分:数据和指向下一个节点的指针。
struct ListNode {
int val;
struct ListNode *next;
};
在这个例子中,我们假设我们想要获取的节点是包含一个整数值的节点。如果链表存储的数据类型不同,那么节点结构体的定义也会有所不同。
为了获取链表中的第 N 个节点,我们需要遍历链表,直到找到目标节点。接下来,我们将编写一个函数来实现此目的。此函数使用两个参数:指向链表头的指针和要查找的节点的索引。
struct ListNode *getNthNode(struct ListNode *head, int n) {
int index = 1;
struct ListNode *current = head;
while (current != NULL) {
if (index == n) {
return current;
}
current = current->next;
index++;
}
return NULL;
}
该函数遍历链表,对于每个节点,它将当前索引与目标索引进行比较。如果它们匹配,则返回当前节点。如果遍历链表后仍然没有找到目标节点,则返回 NULL
。注:此函数在条件判断等情况时,从 1 开始计数,与 C 语言程序员所习惯的从 0 开始计数相反,这个点需要注意。
在我们使用该函数之前,需要先为它编写一些测试用例,确保其可以正确工作。以下是一个示例测试函数,它构建了一个包含 5 个节点的链表,并打印出第 2 个和第 4 个节点的值:
int main() {
struct ListNode *head = malloc(sizeof(struct ListNode));
head->val = 1;
struct ListNode *current = head;
for (int i = 2; i <= 5; i++) {
current->next = malloc(sizeof(struct ListNode));
current = current->next;
current->val = i;
}
current->next = NULL;
struct ListNode *second = getNthNode(head, 2);
struct ListNode *fourth = getNthNode(head, 4);
printf("%d %d\n", second->val, fourth->val);
return 0;
}
输出将为 2 4
,这意味着我们成功获取了第 2 个和第 4 个节点。
本文介绍了如何编写一个函数来获取链表中的第 N 个节点。要实现此目的,需要遍历链表并找到要查找的节点。如果您在编写链表代码时遇到任何问题,请务必参考此文章,并始终记住 C 语言中指针操作的细节。