您的位置:首页 > 其它

单链表操作之查找中间结点

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息