Тема ссылка: 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 }