LeetCode 160. Список пересечений (список, чтобы найти два общих узел)

Тема ссылка: https://leetcode-cn.com/problems/intersection-of-two-linked-lists/

Напишите программу, чтобы найти начальный узел два единого списка пересекаются.

Следующие два списка:

 

Начиная с c1 пересечения узла.

 

Входной сигнал: intersectVal = 8, LISTA = [ 4,1,8,4,5], LISTB = [5,0,1,8,4,5], skipA = 2, skipB = 3
Выход: Ссылка узла с значение = 8
ввода интерпретация: узел пересечения 8 (примечание, если две пересекающиеся перечисление не может быть 0). Из соответствующего заголовка даты начала, список А [4,1,8,4,5], В представляет собой цепь [5,0,1,8,4,5]. В A, первый узел пересечения имеет два узла, в B, есть три узла до узла пересечения.

Входной сигнал: intersectVal = 2, LISTA = [ 0,9,1,2,4], LISTB = [3,2,4], skipA = 3, skipB = 1
Выход: Ссылка узла со значением = 2
интерпретации входного сигнала: узел пересечения 2 (обратите внимание , что, если он не может пересекать два списка равен 0). Из соответствующего заголовка даты начала, список А [0,9,1,2,4], список Б [3,2,4]. В A, первый узел пересечения имеет три узла, в B, имеется узел пересечения перед узлом.

Входной сигнал: intersectVal = 0, LISTA = [ 2,6,4], LISTB = [1,5], skipA = 3, skipB = 2
Выход: нулевая
интерпретация ввода: от соответствующего заголовка даты начала, список А [ 2,6,4], в представляет собой цепь [1,5]. Так как эти два списка не пересекаются, то intersectVal должно быть 0, а skipA skipB может быть любое значение.
Объяснение: Это два списка не пересекаются, и , следовательно , возвращает нуль.
 

Примечание:

Если нет пересечения двух списков, возвращает нуль.
После возвращения к результатам, два список должен еще сохранить первоначальную структуру.
Весь список можно предположить , что не существует структуры цикла.
Постарайтесь встретить программу (п) временную сложность O и только O (1) памяти.

1  / * *
 2  * Определение для одиночно-связанного списка.
3  * структура ListNode {
 4  * INT Val;
5  * структура ListNode * следующий;
6  *};
7   * / 
8  структура ListNode * getIntersectionNode ( структура ListNode * headA, структура ListNode * HeadB) {
 9      структура ListNode * ра = headA, * Pb = HeadB;
10      INT len1 = 0 , len2 = 0 , расстояние = 0 ;
11 ,      а (ра! = NULL) {
 12         len1 ++ ;
13          ра = ра - > следующая;
14      }
 15 в      то время как (! Pb = NULL) {
 16          len2 ++ ;
17          пб = Pb-> следующая;
18      }
 19      структура ListNode * лонг, * Shortlist;
20 ,      если (len1> len2) {
 21          лонг = headA, Shortlist = HeadB;
22 Фокусное          расстояние = len1- len2;
23      } еще {
 24          лонг = HeadB, Shortlist = headA;
25         расстояние = len2- len1;
26      }
 27 в      то время (dist--) лонг = longList-> следующая;
28 в      то время как (лонг! = NULL) {
 29          если (лонг == Шорт - ) возвращение лонг;
30          лонг = longList-> следующая;
31          Shortlist = shortList-> следующая;
32      }
 33      вернуться NULL;
34 }

 

рекомендация

отwww.cnblogs.com/shixinzei/p/11408660.html