题目:LCR 023
解法一:哈希表
将链表A所有元素放入Set
中,遍历链表B元素,若某一元素在Set
中存在,则该元素便是重复元素
java"> public ListNode getIntersectionNode(ListNode headA, ListNode headB) {Set<Object> set = new HashSet<>();while (headA != null) {set.add(headA);headA = headA.next;}while (headB != null) {if (set.contains(headB)) {return headB;}headB = headB.next;}return null;}
解法二:双指针
指针A指向链表A头节点,指针B指向链表B头节点,二者同时遍历,若某一链表遍历结束,则转向另一链表遍历,当两指针指向相同元素时,便是两链表相交结点。
注意:指针移动指向另一个链表头部的条件应该为 nodeA == null
,而非 nodeA.next == null
,因为当两个链表不相同时,跳出循环的条件为二者均为null
,若不让指针指向null
,则会一直循环
java"> public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode nodeA = headA, nodeB = headB;while (nodeA != nodeB) {nodeA = (nodeA == null) ? headB : nodeA.next;nodeB = (nodeB == null) ? headA : nodeB.next;}return nodeA;}