题目链接:https://leetcode.com/problems/intersection-of-two-linked-lists/
题目:
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2 c1 → c2 → c3 B: b1 → b2 → b3
begin to intersect at node c1.
Notes:
- If the two linked lists have no intersection at all, return
null
. - The linked lists must retain their original structure after the function returns.
- You may assume there are no cycles anywhere in the entire linked structure.
- Your code should preferably run in O(n) time and use only O(1) memory.
Credits:
Special thanks to @stellari for adding this problem and creating all test cases.
解题思路:跟Remove Nth Node From End of List这道题一样。把从后往前,变为从前往后。分别计算两个链表的个数,减去他们之前的差,再一起搜索。找到相同的地方,return就解决了。
class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode *Apoint = headA , *Bpoint = headB; int i = 0,j = 0; for ( ; headA != NULL; headA = headA->next) i++; for ( ; headB != NULL; headB = headB->next) j++; if( i > j) { for (int k = 0; k < i-j; k++) Apoint = Apoint->next; } else { for (int k = 0; k < j-i; k++) Bpoint = Bpoint->next; } while ( Apoint != Bpoint) { Apoint = Apoint->next; Bpoint = Bpoint->next; } return Apoint; } };
转载请注明作者:vanish_dust
时间: 2024-10-21 11:31:18