【C语言】查找链表的中间节点及倒数第K个节点
2015-11-26 20:06
302 查看
//找链表的中间节点 Node *MidNode(PLinkList plist) { PLinkList p1,p2; //若链表为空,直接返回 if(plist ==NULL) { printf( "NULL\n"); return ; } /*利用快慢指针,快指针一次走两步,慢指针一次走一步,两个指针同时开始走,当快指针 走向链表尾部时,慢指针则刚好走到链表的一半,即指向中间节点*/ p1=p2= plist; while(p1!=NULL &&p1->next!=NULL) { p1=p1->next->next; p2=p2->next; } return p2; } //找倒数第K个节点 Node *FindKNode(PLinkList plist, int k ) { PLinkList fast,slow; assert(plist ); fast=slow= plist; if(plist ==NULL) { return NULL ; } // 快指针先走K-1步 while(--k &&fast->next!=NULL) { fast=fast->next; } if(k ==0) //当K=0的条件下,两个指针同时开始走 { //当快指针走向表尾时,慢指针就指向倒数第K个节点 while(fast->next!=NULL ) { fast=fast->next; slow=slow->next; } return slow; } return NULL ; }
相关文章推荐
- 【C语言】单链表的逆置
- 有趣的单精度浮点数(float)
- 【C语言】两个有序单链表的合并
- C++学习之模板:模板重载
- const的用法
- 快速排序
- C++矩阵库 Eigen 快速入门
- c++ ip地址的操作 c版
- C++11学习笔记(二)
- C++知识点梳理(1)
- C++ template学习记录(函数模板)
- C++项目调用C#dll项目
- VB与C++之间数据类型的对应关系
- 图像特征LBP原理及C++实现
- Android ndk 入门4 - C++实现
- C++ class static
- 取读浮点数
- 一个诡异的bug
- C++primer_泛型算法-插入迭代器和iostream迭代器
- C++ this pointer