一:解题思路
二:完整代码示例 (C++版和Java版)
第一种方法C++
class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { int lenA = 0,lenB=0; for (ListNode* p = headA; p != NULL; p = p->next, lenA++); for (ListNode* p = headB; p != NULL; p = p->next, lenB++); ListNode* p = headA; ListNode* q = headB; if (lenA > lenB) { for (int i = 0; i < lenA - lenB; i++) { p = p->next; } } else { for (int i = 0; i < lenB - lenA; i++) { q = q->next; } } while (p != q) { p = p->next; q = q->next; } return p; } };
第一种方法Java:
public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { int lenA=0,lenB=0; for(ListNode p=headA;p!=null;p=p.next,lenA++); for(ListNode p=headB;p!=null;p=p.next,lenB++); ListNode p=headA; ListNode q=headB; if(lenA>lenB) { for(int i=0;i<lenA-lenB;i++) { p=p.next; } } else { for(int i=0;i<lenB-lenA;i++) { q=q.next; } } while(q!=p) { q=q.next; p=p.next; } return p; } }
第二种方法C++:
class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { if (headA == NULL || headB == NULL) return NULL; ListNode* p = headA; ListNode* q = headB; while (p != q) { p = p == NULL ? headB : p = p->next; q = q == NULL ? headA : q = q->next; } return q; } };
第二种方法Java:
public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if(headA==null||headB==null) return null; ListNode p=headA; ListNode q=headB; while (p!=q) { p=p==null?headB:p.next; q=q==null?headA:q.next; } return q; } }
原文:https://www.cnblogs.com/repinkply/p/12470016.html