34、相交链表

编写一个程序,找到两个单链表相交的起始节点。

例如,下面的两个链表:

A: a1 → a2

c1 → c2 → c3

B: b1 → b2 → b3
在节点 c1 开始相交。

注意:

如果两个链表没有交点,返回 null.
在返回结果后,两个链表仍须保持原有的结构。
可假定整个链表结构中没有循环。
程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

一开始就是两层循环进行,发现时间限制,之后根据提示可以用长度进行优化

	public static ListNode getIntersectionNode(ListNode headA, ListNode headB) {
		if(headA == null || headB == null){
			return null;
		}else {
			ListNode list1 = headA;
			ListNode list2 = headB;
			int count1 = 0;
			int count2 = 0;
			while (list1 != null) {
				count1++;
				list1 = list1.next;	
			}
			while (list2 != null) {
				count2++;
				list2 = list2.next;
				
			}
			int size = count1 > count2? count1 - count2: count2-count1;			
			if(count1 > count2){
				ListNode list3 = headA;
				ListNode list4 = headB;
				while (size > 0) {
					list3 = list3.next;
					size--;
				}
				while (list3!=null) {
					if(list3 == list4){
						return list3;
						
					}else {
						list3 = list3.next;
						list4 = list4.next;
					}
				}
			}else {
				ListNode list3 = headA;
				ListNode list4 = headB;
				while (size > 0) {
					list4 = list4.next;
					size--;
				}
				while (list4!=null) {
					if(list3 == list4){
						return list3;
						
					}else {
						list3 = list3.next;
						list4 = list4.next;
					}
				}
			}
		}
        return null;
    }

一次性成功的代码,这是头一次,所以说思维清楚了代码也就很容易撸出来
排名比较高
在这里插入图片描述
贴出一个思路
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34446716/article/details/84112355