链表结构有关的算法

来源:互联网 发布:mac装win8还是win10 编辑:程序博客网 时间:2024/06/08 09:41

一直一个单链表求问题:

1. 如何判断链表是否有环?

采用快慢指针方式,从头指针开始,快指针每次移动2步,慢指针每次移动一步,如果存在环,则二者会相遇,如果不存在环,fast会遇到NULL指针而停止。

emptyListNode *fast=head;ListNode *slow=head;while(slow->next!=NULL && fast->next->next!=NULL){    slow=slow->next;    fast=fast->next->next;    if(fast==slow)    return true;}

2. 如何知道环的长度?
方法:从第一次碰撞开始,slow和fast都从此处开始,再次相遇的位置所经历的长度就是环的长度。

3. 如何找出环的连接点
方法:利用定理->从碰撞点出发,到连接点的距离跟head到连接点的距离相等。

4. 如何求出单链表的长度?
方法:利用2中求出的环长+3中head到连接点的长度=单链表的长度。

原创粉丝点击