剑指offer 37---求两个链表的第一个公共结点

来源:互联网 发布:误会 知乎 编辑:程序博客网 时间:2024/05/22 05:10

求两个链表的第一个公共结点

思路:(假设链表不带环)

此处求解的是两个单链表,如果两个单向链表有公共的结点,那么这两个链表从某一结点开始,它们的_next都指向同一结点。由于是单链表的结点,每个结点只有一个_next,因此从第一个公共结点开始,之后它们所有的结点都是重合的,不可能再出现分叉。所以两个有公共结点而部分重合的链表,拓扑形状像一个Y,而不可能是X

struct ListNode{    int _value;    ListNode* _next;    ListNode(const int& value)        :_value(value)        , _next(NULL)    {}};//求两个链表的第一个公共结点ListNode* FirstCommonNode(ListNode* pHead1, ListNode* pHead2){if (pHead1 == NULL || pHead2 == NULL){return NULL;}ListNode* longList = pHead1;ListNode* shortList = pHead2;ListNode* cur1 = pHead1;ListNode* cur2 = pHead2;int len1 = 0;int len2 = 0;while (cur1){cur1 = cur1->_next;len1++;}while (cur2){cur2 = cur2->_next;len2++;}int k = 0;if (len1 > len2){k = len1 - len2;}else{k = len2 - len1;longList = pHead2;shortList = pHead1;}while (k--){longList = longList->_next;}while ((longList != NULL) && (shortList != NULL)){if (longList == shortList){return shortList;}else{longList = longList->_next;shortList = shortList->_next;}}return NULL;}

阅读全文
1 1
原创粉丝点击