函数find_middle()实现了对给定的单链表,查找到其中间结点。如果中间结点为两个,返回前面的那个结点的地址。请完成该函数。 函数接口定义: Node* find_middle(Node* head); head是单链表的头指针,函数返回查找到的结点地址。 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ListNode { int num; struct ListNode *next; }Node; Node *createlist(); /*裁判实现,细节不表*/ Node* find_middle(Node* head); void display(Node *head);/*裁判实现,细节不表*/ int main() { Node *head,*p; head = createlist(); p = find_middle(head); display(p); return 0; } /* 请在这里填写答案 */ 输入样例1: 5 1 3 7 9 10 输出样例1: 7
时间: 2024-03-20 13:38:53 浏览: 17
```
Node* find_middle(Node* head) {
Node *slow = head, *fast = head;
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
```
相关问题
函数find_middle()实现了对给定的单链表,查找到其中间结点。如果中间结点为两个,返回前面的那个结点的地址。请完成该函数。 函数接口定义: Node* find_middle(Node* head); head是单链表的头指针,函数返回查找到的结点地址。
这道题的解法已经有了,这里给出另一种思路。
要返回中间结点,可以使用两个指针,一个慢指针 `slow`,一个快指针 `fast`,每次让 `slow` 前进 1 步,`fast` 前进 2 步,当 `fast` 到达链表结尾时,`slow` 就到达了链表的中间位置。如果链表长度是偶数,则需要返回前面的那个中间结点,可以通过设置一个标志位来判断链表长度的奇偶性。
代码如下:
```
Node* find_middle(Node* head) {
bool flag = false; // 标志位,表示链表长度是否为偶数
Node *slow = head, *fast = head;
while (fast->next) { // 注意判断条件是 fast->next,而不是 fast
slow = slow->next;
fast = fast->next->next;
if (!fast) {
flag = true; // 链表长度为偶数
break;
}
}
if (flag) {
return slow; // 链表长度为偶数,返回前面的那个中间结点
} else {
return slow->next; // 链表长度为奇数,返回中间结点
}
}
```
6-3 查找中间结点 分数 10 作者 王嘉昀 单位 成都信息工程大学 函数find_middle()实现了对给定的单链表,查找到其中间结点。如果中间结点为两个,返回前面的那个结点的地址。请完成该函数。 函数接口定义: Node* find_middle(Node* head); head是单链表的头指针,函数返回查找到的结点地址。 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ListNode { int num; struct ListNode *next; }Node; Node *createlist(); /*裁判实现,细节不表*/ Node* find_middle(Node* head); void display(Node *head);/*裁判实现,细节不表*/ int main() { Node *head,*p; head = createlist(); p = find_middle(head); display(p); return 0; } /* 请在这里填写答案 */ 输入样例1: 5 1 3 7 9 10 输出样例1: 7 输入样例2: 6 1 2 3 5 6 7 输出样例2: 3
```
Node* find_middle(Node* head) {
Node *slow = head, *fast = head;
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
```