剑指offer:链表中环的入口节点

题目描述

一个链表中包含环,请找出该链表的环的入口结点。

实现:

方法一:

public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead)
    {
        if(pHead==null){
			return null;
		}
		ListNode p1=pHead;
		ListNode p2=pHead;
		while(p1!=null && p2!=null){
			p1=p1.next;
			p2=p2.next;
			if(p2!=null){
				p2=p2.next;
			}
			if(p1==p2){
				break;
			}
		}
		if(p2==null){
			return null;
		}
		int count=1;
		p2=p2.next;
		while(p2!=p1){
			p2=p2.next;
			count++;
		}
		p1=pHead;
		p2=pHead;
		for(int i=0; i<count; i++){
			p1=p1.next;
		}
		while(p1!=p2){
			p1=p1.next;
			p2=p2.next;
		}
		return p1;
    }
}
方法二:
public class EntryNodeOfLoop {
	public static ListNode entryNodeOfLoop(ListNode pHead){
		if(pHead==null){
			return null;
		}
		ListNode p1=pHead;
		ListNode p2=pHead;
		while(p1!=null && p2!=null){
			p1=p1.next;
			p2=p2.next;
			if(p2!=null){
				p2=p2.next;
			}
			if(p1==p2){
				break;
			}
		}
		if(p2==null){
			return null;
		}
		p1=pHead;
		while(p1!=p2){
			p1=p1.next;
			p2=p2.next;
		}
		return p1;
	}
}


猜你喜欢

转载自blog.csdn.net/karute/article/details/80047479