Vorlesung 160 überschneidende verknüpfte Liste

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */

 /* 方法
1:穷举   
2:hash表记录第一个遍历的链表
3:双指针,分别从两边的头开始,当一边到null后就换成从另一边的头开始,以此类推,当两者相等时就跳出来返回 
4:双指针,不过先分别遍历两个链表的长度,用较长的减去较短的,得到一个差值,然后长的那个指针从头部往后差值个结点开始,短的那个指针从头开始,双双向后移动,直到相遇则为第一个交点,若为null则为不相交
*/

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) 
    {   
        ListNode* a = headA;
        ListNode* b = headB;        
        while(a != b)
        {
            a = a==NULL?headB:a->next; 
            b = b==NULL?headA:b->next; 
        }
        return a;
    }
};

Es stehen vier Methoden zur Verfügung

1: Vollständig   
2: Die Hash-Tabelle zeichnet die erste durchquerte verknüpfte Liste auf.
3: Doppelte Zeiger, beginnend mit den Köpfen auf beiden Seiten, wenn eine Seite Null erreicht, beginnen sie mit dem Kopf auf der anderen Seite und so weiter, wenn die beiden sind gleich Herausspringen und zurückgeben 
4: Doppelzeiger, aber durchqueren Sie zuerst die Längen der beiden verknüpften Listen, subtrahieren Sie die kürzere von der längeren, um eine Differenz zu erhalten, und dann ist der längere Zeiger eine Differenz der Knoten vom Kopf bis zum die Rückseite Zu Beginn beginnt der kurze Zeiger von vorne und bewegt sich in beide Richtungen rückwärts, bis er sich trifft. Er ist der erste Schnittpunkt. Wenn er null ist, bedeutet dies, dass er disjunkt ist
 

Supongo que te gusta

Origin blog.csdn.net/mc10141222/article/details/124182496
Recomendado
Clasificación