如果链表有奇数个结点,就直接返回中间的结点,如果有偶数个结点,就有两个中间结点返回中间第二个结点
比如
[1,2,3,4,5]中间结点是3
[1,2,3,4,5,6]中间结点是4

一、通过链表长度进行计算
1. 计算链表结点个数需要遍历一次,所以首先遍历一次链表,计算链表结点个数。
2. 计算出结点个数,然后计算中间结点,无论是奇数还是偶数都是length/2+1。
3. 找出这个结点返回即可。

#include<stdio.h>
#include<stdlib.h>
struct ListNode* middleNode(struct ListNode* head);
struct ListNode {int val;struct ListNode *next;
};int main(){// 申请结点 struct ListNode* lnode1 = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* lnode2 = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* lnode3 = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* lnode4 = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* lnode5 = (struct ListNode*)malloc(sizeof(struct ListNode));lnode1->val=1;lnode2->val=2;lnode3->val=3;lnode4->val=4;lnode5->val=5;lnode1->next=lnode2;lnode2->next=lnode3;lnode3->next=lnode4;lnode4->next=lnode5;lnode5->next=NULL;ListNode* temp = middleNode(lnode1);while(temp!=NULL){printf("%d",temp->val);temp=temp->next;}return 0;
}struct ListNode* middleNode(struct ListNode* head){// 指向头结点 struct ListNode* p = head;int length=0;int middle;// 计算长度 while(p!=NULL){length++;p=p->next;}// 寻找中间结点位置 middle=length/2+1;// 再次指向头结点 p = head; // 寻找中间结点 for(int i=1;i<middle;i++){p=p->next;}return p;
}

二、通过两个指针一个快指针,一个慢指针。
快指针走两步,慢指针走一步,最后快指针走到末尾,慢指针就是指向中间结点

#include<stdio.h>
#include<stdlib.h>
struct ListNode* middleNode(struct ListNode* head);
struct ListNode {int val;struct ListNode *next;
};int main(){// 申请结点 struct ListNode* lnode1 = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* lnode2 = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* lnode3 = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* lnode4 = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* lnode5 = (struct ListNode*)malloc(sizeof(struct ListNode));lnode1->val=1;lnode2->val=2;lnode3->val=3;lnode4->val=4;lnode5->val=5;lnode1->next=lnode2;lnode2->next=lnode3;lnode3->next=lnode4;lnode4->next=lnode5;lnode5->next=NULL;ListNode* temp = middleNode(lnode1);while(temp!=NULL){printf("%d",temp->val);temp=temp->next;}return 0;
}
struct ListNode* middleNode(struct ListNode* head){// 快指针struct ListNode* p = head;// 慢指针struct ListNode* q = head;while(p!=NULL&&p->next!=NULL){q=q->next;p=p->next->next;} return q;
}

C语言实现查找链表中间结点相关推荐

  1. 查找学生链表c语言,【查找链表面试题】面试问题:C语言实现学生… - 看准网...

    趁着放假无事,开始用C语言开发一些小的项目,巩固基础知识的同时学习新的知识. 学生成绩管理系统实现的功能有:成绩录入.学生成绩查询.删除.修改.通过文件保存等. 开发这样一个系统需要具备的知识:线性表 ...

  2. C语言单链成绩表,【查找链表面试题】面试问题:C语言基于单链… - 看准网

    传说中讲课通俗而不庸俗,说话风流而不下流的小编又来了哦,今天的主要内容是:C语言基于单链表得学生成绩管理系统.首先给大家总结下为什么你们学习C语言会觉得难,尤其是对于单链表这块,主要原因得是因为一下两 ...

  3. 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...

    的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...

  4. 设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1)

    设计一算法查找链表的中间结点.要求该算法的时间复杂度为O(n),空间复杂度为O(1) #include <stdio.h> #include <stdlib.h> typede ...

  5. C语言——实现用链表存储学生信息,当输入0退出输入,并查找学号为3的学生是否存在

    功能实现: 1.往链表内录入学生的学号信息: 2.当输入的学号为0时候,退出录入: 3.查找链表内是否有学号为3的学生. 编译执行结果: 代码实现: #include <stdlib.h> ...

  6. c语言用链表实现成绩管理系统,C语言基于单链表得学生成绩管理系统

    前言 传说中讲课通俗而不庸俗,说话风流而不下流的小编又来了哦,今天的主要内容是:C语言基于单链表得学生成绩管理系统.首先给年夜家总结下为什么你们学习C语言会觉得难,尤其是对单链表这块,主要原因得是因为 ...

  7. C语言实现通用链表初步(一)

    注意:本文讨论的是无头单向非循环链表. 假设不采用Linux内核链表的思路,怎样用C语言实现通用链表呢? 一种常用的做法是: typedef int element_t; struct node_in ...

  8. c语言仓库管理系统链表,仓库管理系统 C语言 C++ 数据结构 链表 课程设计

    仓库管理系统 C语言 C++ 数据结构 链表 课程设计 #include #include #include #include #define MAX 64 typedef struct node{ ...

  9. C语言的单向链表的操作方法

    写写基于C语言的单向链表的基本操作的实现, 包括输入初始化. 判断链表是否为空. 获取链表的长度. 在链表指定位置插入数据. 修改指定位置的数据. 删除指定位置的数据. 查找指定位置的数据内容. 查找 ...

最新文章

  1. 计算机体系结构:嵌入式方法_计算机考研——计算机二级学科详解
  2. ABAP模块P类型详细解释
  3. 飞桨领航团邀你出战!黑客松线下48H Coding Party等你来
  4. CompletableFuture多任务组合
  5. php原生sql语法,thinkphp执行原生SQL语句的实现方法
  6. pytest+allure生成漂亮的报告+显示
  7. python缺失值处理 fillna能否用scala来处理_数据清洗(一)丨处理缺失数据
  8. 大数据可视化有什么作用
  9. 代码随想录程序员求职攻略完整pdf开放下载
  10. 使用AdapterTypeRender对不同类型的item数据到UI的渲染
  11. 卸载ncurses_linux 安装,卸载 监控服务
  12. wps取消英文首字母大写功能
  13. 【python】python读取命令行选项参数
  14. 大数据技术架构_独家解读!阿里首次披露自研飞天大数据平台技术架构
  15. bu yong di san fang jiao huan liang ge shu zi
  16. 一图看完北京互联网公司分布!中关村、后厂村、望京互联网公司扎堆圣地。
  17. 2742: [HEOI2012]Akai的数学作业
  18. 【C语言】实现字符串逆序输出(包含空格的字符串)
  19. 51单片机入门学习(三):定时器
  20. java实现图片jpg批量转换成pdf

热门文章

  1. 剑指Offer——变态跳台阶(厉害的癞蛤蟆)
  2. Python 递归 深入理解递归 Python递归剖析,绝对让你看懂!
  3. Flume数据采集结合etcd作为配置中心在爬虫大数据采集处理中的架构实践。
  4. 如何计算 R 中的基尼系数(附示例)
  5. 数据库 SQL常用语句
  6. 视频超分——06 DUF(待更新)
  7. 扫描ppt转换成pdf软件
  8. 2018android手机机皇,2018年旗舰基本面世,这四台手机是否你眼中的安卓机皇?
  9. 软件测试工程师高频面试题
  10. 20230322英语学习