码迷,mamicode.com
首页 > 编程语言 > 详细

Java-找出两个单链表的首个公共节点

时间:2015-06-09 17:29:39      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:java

单链表中的简单算法

/**
 * 得到两个单链表的公共结点
 * 先求出两个链表的长度,并求出二者的差值dif,两个指针分别指向链表头部,让指向长的链表的指针先向链表尾部移动dif步。
 * 最后一起一步步移动两个指针,当两个指针都指向同一个结点时,返回那个结点
 * @param list1
 * @param list2
 * @return
 */
public static ListNode getFirstCommonNode(ListNode list1,ListNode list2){
	if(list1==null || list2==null){
		return null;
	}
	
	int length1 = getListLength(list1);
	int length2 = getListLength(list2);
	
	ListNode longList = list2;
	ListNode shortList = list1;
	int dif = length2 - length1;
	
	if(length1 > length2){
		longList = list1;
		shortList = list2;
		dif = length1 - length2;
	}
	
	while(dif>0){
		longList = longList.getNext();
		dif--;
	}
	
	while(longList!=null && shortList!=null && longList!=shortList){
		longList = longList.getNext();
		shortList = shortList.getNext();
	}
	
	return longList;
}

/**
 * 得到链表的长度
 * @param list
 * @return
 */
public static int getListLength(ListNode list){
	int length = 0;
	while(list != null){
		length++;
		list = list.getNext();
	}
	return length;
}


Java-找出两个单链表的首个公共节点

标签:java

原文地址:http://blog.csdn.net/zhuyunhe/article/details/46426691

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!