📌  相关文章
📜  用于编写函数以获取链表中第 N 个节点的 C 程序(1)

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

编写 C 程序获取链表中第 N 个节点

使用链表是一种比较常见的数据结构。我们可以使用链表来存储一组数据,其中每个节点记录一个数据元素。在某些情况下,需要从链表中获取特定位置的节点。本文将介绍如何编写 C 程序来获取链表中的第 N 个节点。

声明链表节点

在 C 语言中,链表节点可以定义为一个结构体,其中包含两个主要部分:数据和指向下一个节点的指针。

struct ListNode {
  int val;
  struct ListNode *next;
};

在这个例子中,我们假设我们想要获取的节点是包含一个整数值的节点。如果链表存储的数据类型不同,那么节点结构体的定义也会有所不同。

编写函数获取第 N 个节点

为了获取链表中的第 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 语言中指针操作的细节。