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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章