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

来源:互联网 发布:mac book air 虚拟机 编辑:程序博客网 时间:2024/05/03 20:58

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




//查找链表的中间结点;


//自定义的结点结构体和头指针结构体:

#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;}

1 0
原创粉丝点击