160-相交链表

160-相交链表

力扣160 / 剑指offer52

https://leetcode-cn.com/problems/intersection-of-two-linked-lists/

这题有坑,题目描述的不清楚。这题意思是节点地址相同(而不只是值)。

思路:让A末尾接上B组成(AB),B的末尾接上A(组成BA),这样两个链表长度就相同了,遍历他们得到相同的节点就是交点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class one_six_zero_相交链表 {

@Test
public void test(){
ListNode commons = new ListNode(8);
commons.next= new ListNode(4);
commons.next.next = new ListNode(5);

ListNode headA = new ListNode(4);
headA.next = new ListNode(1);
headA.next.next = commons;

ListNode headB = new ListNode(5);
headB.next = new ListNode(0);
headB.next.next = new ListNode(1);
headB.next.next.next = commons;

ListNode res = getIntersectionNode(headA, headB);
System.out.println(res.val);
}

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA == null || headB == null) {
return null;
}
ListNode n1 = headA;
ListNode n2 = headB;

while(n1 != n2){
n1 = n1 == null ? headB : n1.next;
n2 = n2 == null ? headA : n2.next;
}
return n1;
}
}

需要注意的是n1 == null而不是n1.next == null,也就是说两个节点都有一次null的机会,否则如果两个链表没有交点,就直接死循环了

评论区看到文艺版解释:

两个结点不断的去对方的轨迹中寻找对方的身影,只要二人有交集,就终会相遇❤

我哭了,程序都比我懂浪漫🙁


其他链表类型的题目点击这里

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×