C语言编写:给定一个头结点为head的非空单链表,返回链表的中间结点。如果有两个中间节点,则返回第二个中间结点。
时间: 2024-06-22 17:03:06 浏览: 6
在C语言中,找到一个单链表的中间结点可以使用迭代或递归的方法。这里我会给你一个迭代的方法,因为迭代通常更高效,不需要额外的空间开销:
```c
struct ListNode {
int val;
struct ListNode *next;
};
// 定义一个辅助函数,用于找到链表的长度
int getLength(struct ListNode* head) {
int count = 0;
struct ListNode* temp = head;
while (temp != NULL) {
count++;
temp = temp->next;
}
return count;
}
// 主函数,返回链表的中间结点
struct ListNode* findMiddleNode(struct ListNode* head) {
if (head == NULL || head->next == NULL) {
return head; // 如果链表为空或只有一个元素,直接返回头结点
}
struct ListNode* slow = head, *fast = head;
int length = getLength(head);
// 当fast指针到达链表尾部时,slow指针将停在中间位置
for (int i = 0; i < length / 2; i++) {
fast = fast->next;
if (fast == NULL) {
break; // 链表长度为奇数,slow是中间结点
}
slow = slow->next;
}
return slow; // 返回找到的中间结点
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)