问题
时间复杂度:O(N+M),其中 N 和 M 是给定的两个 LinkedList 的长度。
求两个节点的长度并得到长度差
在最长的列表中向前移动两个列表的长度差,这样两个列表将从相同的长度开始。
遇到相同节点时返回。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { int lenA = findLength(headA); int lenB = findLength(headB); ListNode A = headA; ListNode B = headB; int diff = Math.abs(lenA-lenB); if(lenA > lenB){ A = travelAhead(A,diff); } else B = travelAhead(B,diff); return findIntegersection(A,B); } public ListNode findIntegersection(ListNode a, ListNode b){ while(a!=null && b!=null){ if(a.equals(b)) return a; a= a.next; b= b.next; } return null; } public ListNode travelAhead(ListNode head, int diff){ while(diff-->0){ head = head.next; } return head; } public int findLength(ListNode head){ int count = 0; while(head!=null){ head = head.next; count++; } return count; } }
以上是两个链表的交集的详细内容。更多信息请关注PHP中文网其他相关文章!