leetcode算法题--相交链表

原题链接:

1、set

用set先保存一个链表的所有节点,然后判断另外一个链表的节点是否在其中

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
          
   
     set<ListNode*> st;
     ListNode *p=headA;
     while(p){
          
   
         st.insert(p);
         p=p->next;
     }
     p=headB;
     while(p){
          
   
         if(st.count(p)) return p;
         p=p->next;
     }
     return NULL;
 }

2、双指针

  1. 指针 pA指向 A 链表,指针 pB 指向 B 链表,依次往后遍历
  2. 如果 pA到了末尾,则 pA = headB 继续遍历
  3. 如果 pB到了末尾,则 pB = headA 继续遍历
  4. 直到两指针相遇,否则不会相遇

如图():

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
          
   
    ListNode *p=headA,*q=headB;
    while(p!=q){
          
   
        p=p!=NULL?p->next:headB;//到了末尾则指向B
        q=q!=NULL?q->next:headA;//到了末尾则指向A
    }
    return p;
}
经验分享 程序员 微信小程序 职场和发展