[Leetcode] 160、相交链表 Intersection of Two Linked Lists
一、题目描述
题目链接 https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
编写一个程序,找到两个单链表相交的起始节点。
如下面的两个链表**:**
今天开始分块刷题嘞!
首先先刷刷链表吧!
最开始小白整了半天,愣是没看懂题目输入啥意思?
后来才发现,题目原来只输入俩链表?
最开始整了半天,暴力无果,遂看答案。
这道题最棘手的事儿就是两个链表长度不同,如果长度相同那就太好办了。
看了看答案发现还是精妙。
具体做法:
指针 pA 指向 A 链表,指针 pB 指向 B 链表,依次往后遍历如果 pA 到了末尾,则 pA = headB 继续遍历如果 pB 到了末尾,则 pB = headA 继续遍历比较长的链表指针指向较短链表head时,长度差就消除了如此,只需要将最短链表遍历两次即可找到位置
这视频挺有意思
浪漫求解视频
贴代码
2、我的代码
public class Solution {
public ListNode
getIntersectionNode(ListNode headA
, ListNode headB
) {
ListNode aHead
= headA
;
ListNode bHead
= headB
;
boolean aflag
= true;
boolean bflag
= true;
while(aHead
!=null
||bHead
!=null
){
if(aHead
==null
&&aflag
){
aHead
= new ListNode(-55);
aHead
.next
= headB
;
aflag
= false;
}
if(bHead
==null
&&bflag
){
bHead
= new ListNode(-56);
bHead
.next
= headA
;
bflag
= false;
}
if(aHead
!=null
&&bHead
!=null
&&aHead
== bHead
){
return aHead
;
}
aHead
= aHead
.next
;
bHead
= bHead
.next
;
}
return null
;
}
}
小白写的代码就是垃圾。。
3、大神的代码
public ListNode
getIntersectionNode(ListNode headA
, ListNode headB
) {
if (headA
== null
|| headB
== null
) return null
;
ListNode pA
= headA
, pB
= headB
;
while (pA
!= pB
) {
pA
= pA
== null
? headB
: pA
.next
;
pB
= pB
== null
? headA
: pB
.next
;
}
return pA
;
}