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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值