练习 #2
Coddy 链表:数据结构系列第 5 课 课程的第 11 课,共 14 课。
挑战
简单编写一个函数 findMiddle,接收一个整数数组 arr(即链表的值),并返回中间值。
长度为奇数时,返回正中间的值。长度为偶数时,返回两个中间节点中的第二个(索引为 length / 2)。如果列表为空,返回 -1。
请使用链表解决这个问题!经典方法是使用两个指针:一个慢指针和一个快指针。快指针到达末尾时,慢指针就位于中间。
你必须使用 LinkedList 类(该类与 node.<ext> 一起在 linkedlist.<ext> 中提供)。不要使用语言内置功能,例如数组内置的反转、切片或标准库列表操作来计算结果。
亲手试试
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "solution.h"
int main() {
char line[8192];
if (!fgets(line, sizeof(line), stdin)) line[0] = '\0';
int arr[4096];
int len = 0;
char* tok = strtok(line, " \t\r\n");
while (tok) { arr[len++] = atoi(tok); tok = strtok(NULL, " \t\r\n"); }
int r = findMiddle(arr, len);
printf("%d\n", r);
return 0;
}
链表:数据结构系列第 5 课中的所有课
自己练习: C 在线编译器