c语言求链表的中间结点
时间: 2024-10-20 09:05:15 浏览: 24
在C语言中,求链表的中间节点通常采用双指针法,这种方法不需要提前知道链表的长度。以下是基本步骤:
1. **初始化两个指针**:设两个指针`prev`和`curr`,初始都指向链表的头节点`head`。同时创建一个临时指针`temp`用于保存中间节点。
2. **遍历链表**:`curr`先向前移动一步,即`curr = curr->next`。
3. **比较移动速度**:然后`prev`每次也移动一步,如果`prev == curr`,说明`prev`已经到达链表的中部,此时`temp`就是中间节点。如果`prev`还没到`curr`的位置,继续循环。
4. **返回中间节点**:当`prev`追上`curr`时,退出循环,返回`temp`所指向的节点作为链表的中间节点。
下面是一个简单的示例代码片段:
```c
struct ListNode* findMiddleNode(struct ListNode* head) {
struct ListNode *prev = head;
struct ListNode *curr = head;
if (head != NULL) {
while (curr != NULL && curr->next != NULL) {
prev = prev->next;
curr = curr->next->next;
}
return prev; // 返回中间节点
} else {
return NULL;
}
}
```
这里假设链表节点的结构定义如下:
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
```
阅读全文