您的位置:首页 > 理论基础 > 数据结构算法

关于有环链表的若干问题总结

2016-08-17 14:16 141 查看
1、判断一个链表是否有环

public boolean hasCircle(ListNode pHead) {
if(pHead == null)
return false;

ListNode fast = pHead, slow = pHead;

while(fast != null) {
if(fast.next != null)
fast = fast.next.next;
else
fast = fast.next;

slow = slow.next;

if(fast == slow)
return true;
}

if(fast == null)
return false;
}


2、求一个有环链表的长度

3、求一个有环链表的环的首结点

4、求一个链表的长度

public int lenOfCircle(ListNode pHead) {
if(pHead == null)
return 0;

ListNode fast = pHead, slow = pHead;

while(fast != null) {
if(fast.next != null)
fast = fast.next.next;
else
fast = fast.next;

slow = slow.next;

if(fast == slow)
break;
}

if(fast == null)
return 0;

int len = 1;
slow = slow.next;
while(slow != fast) {
slow = slow.next;
len++;
}

return len;
}/*
public class ListNode {
int val;
ListNode next = null;

ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {

public ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHead == null)
return null;

ListNode pNode, fast = pHead, slow = pHead;

while(fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;

if(fast == slow)
break;
}

if(fast == null || fast.next == null)
return null;

slow = pHead;
while(slow != fast) {
fast = fast.next.next;
slow = slow.next;
}

return slow;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法与数据结构