题解 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46
import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { // pHead1.next == pHead2.next ? // 把链表遍历两次,因为距离和移动速度相同 // 如果有相同的节点,那么最后一定会相遇 ListNode l1 = pHead1; ListNode l2 = pHead2; while (l1 != l2) { l1 = (l1 == null) ? pHead2 : l1.next; l2 = (l2 == null) ? pHead1 : l2.next; } return l1; } }
使用双指针进行遍历,然后遍历两遍,由于遍历速度和距离是相同的,如果两个链表进行相交,那么我们返回l1一定是相交的