From f281f4124941da875a81df70b9b91b6eaf529434 Mon Sep 17 00:00:00 2001 From: Desislava Shunina <115353472+desiish@users.noreply.github.com> Date: Tue, 5 Nov 2024 17:12:04 +0200 Subject: Add tasks solutions --- Practicum/pract05/solutions/Task04.cpp | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Practicum/pract05/solutions/Task04.cpp (limited to 'Practicum/pract05/solutions/Task04.cpp') diff --git a/Practicum/pract05/solutions/Task04.cpp b/Practicum/pract05/solutions/Task04.cpp new file mode 100644 index 0000000..3fc11a5 --- /dev/null +++ b/Practicum/pract05/solutions/Task04.cpp @@ -0,0 +1,52 @@ +/** + * Definition for singly-linked list. + * struct ListNode { + * int val; + * ListNode *next; + * ListNode(int x) : val(x), next(NULL) {} + * }; + */ +class Solution { +public: + size_t getLen(ListNode* head) + { + size_t cnt = 0; + while(head) + { + head = head->next; + cnt++; + } + + return cnt; + } + ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { + if(!headA || !headB) + return nullptr; + + size_t sizeA = getLen(headA); + size_t sizeB = getLen(headB); + + while(sizeA > sizeB) + { + headA = headA->next; + sizeA--; + } + + while(sizeB > sizeA) + { + headB = headB->next; + sizeB--; + } + + while(headA && headB) + { + if(headA == headB) + return headA; + + headA = headA->next; + headB = headB->next; + } + + return nullptr; + } +}; -- cgit v1.3.1-23-gd82d