用C语言实现:求链表中间结点的值
时间: 2024-06-10 21:09:16 浏览: 110
好的,这是一个很基础的问题。我可以为您提供以下的 C 语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 链表结点定义
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
int main() {
// 创建链表
ListNode *head = (ListNode *)malloc(sizeof(ListNode));
head->val = 1;
head->next = NULL;
ListNode *p = head;
for (int i = 2; i <= 6; i++) {
ListNode *node = (ListNode *)malloc(sizeof(ListNode));
node->val = i;
node->next = NULL;
p->next = node;
p = node;
}
// 找出链表中间结点的值
ListNode *fast = head, *slow = head;
while (fast && fast->next) {
fast = fast->next->next;
slow = slow->next;
}
printf("链表中间结点的值为:%d\n", slow->val);
// 释放链表空间
ListNode *tmp;
while (head) {
tmp = head;
head = head->next;
free(tmp);
}
return 0;
}
```
这段代码通过快慢指针的方式找到链表的中间结点,时间复杂度为 O(n)。如果链表节点数为奇数,则中间结点即为链表的正中间;如果链表节点数为偶数,则中间结点为中间两个节点的任意一个。
阅读全文