链表问题11——两个单链表相交的系列问题(四):总结

题目

请实现一个函数,如果两个链表相交,请返回相交的第一个节点,如果不相交,返回null即可。链表可能有环或无环。


要求

如果链表1的长度为N,链表2的长度为M,时间复杂度达到O(M+N),额外空间复杂度请达到O(1).


思路

综合前三篇文章,即可。

  1. 判断是否有环,有则返回入环节点,否则返回null
  2. 判断两个无环链表是否相交,有则返回第一个交点,否则返回null
  3. 判断两个有环链表是否相交,有则返回第一个交点,否则返回null

源码

public class Node{
	public int value;
	public Node next;
	public Node(int data){
		this.value=data;
	} 
}
public Node getIntersectNode(Node head1,Node head2){
	if(head1==null||head2==null){
		return null;
	}
	Node loop1=getLoopNode(head1);
	Node loop2=getLoopNode(head2);

	if(loop1==null&&loop2==null){
		return noLoop(head1,head2);
	}
	if(loop1!=null&&loop2!=null){
		return bothLoop(head1,loop1,head2,loop2);
	}
	return null;
}

 

发布了43 篇原创文章 · 获赞 21 · 访问量 4903

猜你喜欢

转载自blog.csdn.net/flying_1314/article/details/103934422