C语言实现单链表面试题——基础篇(下)
来源:互联网 发布:下载美化照片软件 编辑:程序博客网 时间:2024/06/05 14:21
9.查找单链表的中间节点,要求只能遍历一次链表
思想:这个问题,我们需要先创建一个数组,但我们需要知道链表大致的范围,我在这里假定链表节点数小于1000个,然后我们每遍历一个节点,就把节点放入数组(数组从零逐个递增,用 i 表示存放的个数 ),最后数组pavi[i/2]存放的就是中间节点
代码:
ListNode* ListFindMid(ListNode *pList)//找出链表中间节点,只遍历一次{ if(pList == NULL) return NULL; ListNode *pavi[1000] = {0};// int i = 0; while(pList != NULL) { pavi[i] = pList; i++; pList = pList->next; } return pavi[i/2];//}
这种方法是有问题的,在不知道链表节点个数范围时,数组初始化大小不能确定,所以我们又想到另一个方法:快慢指针
ListNode* ListFindMid(ListNode *pList)//找出链表中间节点,只遍历一次//利用快慢指针{ if(pList == NULL) return NULL; ListNode *pFast = pList; ListNode *pSlow = pList; while((pFast != NULL)&&(pFast->next != NULL)) { pSlow = pSlow->next; pFast = pFast->next->next; } return pFlow;}
10.查找单链表的倒数第k个节点,要求只能遍历一次链表
思想: 方法同查找中间节点的方法相同,可以用指针数组来求,也可用快慢指针:创建一个快指针Pfast先指向第K个节点,如果没有第K个节点则返回NULL,再创建一个慢指针Pslow,然后同时向后移动,直到Pfast指向NULL时,Pslow指向的就是单链表倒数第K个节点。
ListNode* ListFindNode(ListNode *pList, int K)//倒数k个节点{ if(pList == NULL) return NULL; int i = 0; ListNode *pFast = pList; ListNode *Pslow = pList; for(i=0; i<K; i++) { if(pFast == NULL) return NULL; pFast = pFast->next; } while(pFast != NULL) { pFast = pFast->next; Pslow = Pslow->next; } return Pslow;}
阅读全文
0 0
- C语言实现单链表面试题——基础篇(下)
- C语言实现单链表面试题(基础篇)
- C语言实现单链表面试题(基础篇)
- c语言实现单链表面试题(基础篇)
- C语言实现单链表面试题——基础篇(上)
- C语言实现单链表面试题——基础篇(中)
- C语言实现单链表面试题--基础篇
- C语言实现单链表面试题--基础篇
- C语言实现单链表面试题--基础篇
- c语言实现单链表面试题--基础篇
- C语言实现单链表面试题_基础篇
- C语言实现单链表面试题---基础篇
- C语言实现单链表面试题 ----基础篇
- c语言实现单链表面试题——进阶
- C语言实现单链表面试题(进阶篇)
- c语言实现单链表面试题
- c语言实现单链表面试题之进阶篇
- C语言实现单链表面试题-------进阶篇
- 第一次使用git提交本地文件到github
- git:https与ssh的使用区别
- FreeRTOS学习6--软件定时器
- Qt 的 .pro 文件基本格式
- 前端知识图谱
- C语言实现单链表面试题——基础篇(下)
- linux smartctl pm961
- java--replace()、replaceAll()、replcaeFirst()
- leetcode-13. Roman to Integer(罗马数字转化成整数)
- flash复制旋转做成花朵
- 超简单快速实现附件上传(各种格式文件)和下载显示(调用浏览器下载后选择可以打开的应用查看)
- 安卓学习日记 6-9 Rxjava
- Java锁机制--synchronized
- 启程了!在CSDN