Intersection of Two Linked Lists

xiaoxiao2021-02-28  12

就是找到两个链表的交点。2种方法,第一个是用一个set,保存链表A的结点地址,然后遍历链表B,每次在set中寻找,看是否有一样的,有则找到了。

第二种方法是找到两个链表的长度之差,然后使长的链表先走相差的步数,然后再一起向前移动

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: //求链表长度 int get_lenth(ListNode* head) { int len = 0; while(head) { head = head->next; len++; } return len; } //将较长的链表前移d个位置,使得和较短的链表处于“同一起跑线” ListNode* forward_head(int l,int s,ListNode* head) { int d = l - s; while(head && d) { head = head->next; d--; } return head; } ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { int len_a = get_lenth( headA); int len_b = get_lenth( headB); if(len_a > len_b) headA = forward_head(len_a,len_b,headA); else headB = forward_head(len_b,len_a,headB); while(headA&&headB) { if(headA == headB) return headA; headA = headA->next; headB = headB->next; } return nullptr; } };
转载请注明原文地址: https://www.6miu.com/read-2500147.html

最新回复(0)