单链表操作之查找中间结点
2016-06-08 22:50
288 查看
***单链表操作之查找中间结点***
//查找链表的中间结点;//自定义的结点结构体和头指针结构体:
#include<stdio.h> #include<assert.h> #include<stdlib.h> #include<string.h> typedef int DataType; typedef struct LinkNode { DataType data; struct LinkNode* next; }LinkNode,*pLinkNode;//结点结构体 typedef struct LinkList { LinkNode* pHead;//头结点指针 }LinkList ,*pLinkList;//链表
//函数原型:pLinkNode FindMidNode(pLinkList pList);
/* 思路分析:要找的链表的中间结点,我在这里的解法用到的是快慢指针;定义两个指针,都指向链表的第一个成员,然后快的指针每次走两步,慢的指针每次走一步,当快指针指向的next为NULL即链表结点为奇数个的时候,或者,快指针快指针自身为空的时候停下,即链表元素为偶数个,此时的慢指针走了s步,则快指针走了2s步,则此时 慢指针所指向的结点为中间节点;
//这道题比较简单,理解起来也容易,但是关于快慢指针的应用才是重点,后续的文章会讲到链表的带环问题,会对快慢指针进行再次的应用,就比较难理解了!
//算法代码实现:
pLinkNode FindMidNode(pLinkList pList) { pLinkNode fast = NULL ; pLinkNode slow = NULL; assert(pList); fast = slow = pList ->pHead ; while(fast && fast->next ) { fast = fast->next ->next ; slow = slow->next; } return slow; }
相关文章推荐
- [C/C++]反转链表
- C#实现基于链表的内存记事本实例
- C#模拟链表数据结构的实例解析
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++利用静态成员或类模板构建链表的方法讲解
- C++实现简单的学生管理系统
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- C#实现的简单链表类实例
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- Java模拟有序链表数据结构的示例
- C语言单循环链表的表示与实现实例详解
- C++实现的链表类实例
- PHP小教程之实现链表
- PHP中模拟链表和链表的基本操作示例
- C语言双向链表的表示与实现实例详解
- js链表操作(实例讲解)
- C语言实现输出链表中倒数第k个节点