【leetcode】Intersection of Two Linked Lists

问题描述:
Write a program to find the node at which the intersection of two singly linked lists begins.


For example, the following two linked lists:

	/**
	 * A:         	 a1 → a2
                   						↘
                     						c1 → c2 → c3
                   						↗            
	   B:     b1 → b2 → b3
	 */



思路:

计算A的长度:B的长度;
若A==B,直接从头开始比较值,相同返回,不同A/B同时next;
若A!=B,计算差值dif,让长的先next dif个长度,在开始逐个比较两个值。相同返回,不同同时next;


附Java代码,已过Leetcode~

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
		if(headA==null || headB==null)
			return null;
		int common=0;
		int dif = 0;
		int flag=0;
		ListNode tempA=headA;
		ListNode tempB=headB;	
		//A的长度
		while(tempA!=null || tempB!=null){
			if(tempA!=null && tempB!=null){
				tempA=tempA.next;
				tempB=tempB.next;
				common++;
			}
			if(tempA==null && tempB!=null){
				flag=1;
				tempB=tempB.next;
				dif++;
			}
			if(tempB==null && tempA!=null){
				flag=2;
				tempA=tempA.next;
				dif++;
			}
		}
		tempA=headA;
		tempB=headB;
		if(flag==1){
			while(dif>0){
				dif--;
				tempB=tempB.next;
			}
		}else if(flag ==2){
			while(dif>0){
				dif--;
				tempA=tempA.next;
			}
		}
		//进行比较
		while(common-->0){
			if(tempA.val==tempB.val)
				return tempA;
			else{
				tempA=tempA.next;
				tempB=tempB.next;
			}
		}
		return null;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值