LeetCode:Intersection of Two Linked Lists
阿新 • • 發佈:2019-02-09
時間複雜度O(N+M),空間複雜度O(1):
第一遍遍歷兩個列表,得到列表headA和headB的元素個數N,M,假設N>M。
然後headA從第N-M個元素開始遍歷,headB從第一個元素開始遍歷,遇到相等的元素返回。如果遍歷到末尾都不相等,返回NULL。
與標準答案的複雜度是一樣的,我的方法更好理解些。
public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { int lenA = getLen(headA); int lenB = getLen(headB); ListNode shortHead = headA; ListNode longHead = headB; if (lenA > lenB) { shortHead = headB; longHead = headA; } int i = 0; while (i < Math.abs(lenB - lenA)) { i++; longHead = longHead.next; } while (shortHead != longHead) { shortHead = shortHead.next; longHead = longHead.next; if (shortHead == null) { return null; } } return shortHead; } private int getLen(ListNode head) { int len = 0; while (head != null) { len++; head = head.next; } return len; } }