数据结构与算法面试程序员

数据结构面试之 两条相交的单链表

2017-06-07  本文已影响193人  Linux后端研发工程实践

1.限制和要求

2.思考

3.算法图解

相交初始状态 长链表先往后遍历n步 一起向后遍历1 一起向后遍历2

4.代码实现

struct ListNode {
      int val;
      ListNode *next;
      ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
    ListNode * getIntersectionNode(ListNode * ahead, ListNode * bhead) {
        int alen = 0;
        int blen = 0;
        ListNode * acur = ahead;
        ListNode * bcur = bhead;
        
        alen = 1;
        while (acur && acur->next)
        {
            ++alen;
            acur = acur->next;
        }
        
        blen = 1;
        while (bcur && bcur->next)
        {
            ++blen;
            bcur = bcur->next;
        }
        
        if (acur == bcur) //尾节点相同
        {
            acur = ahead;
            bcur = bhead;
            int n = abs(alen - blen);
            if (alen > blen)              //比较长的节点先往后遍历n步
                while (n--) acur = acur->next;
            else
                while (n--) bcur = bcur->next;
            
            while (acur != bcur) //一直往后遍历直到相交点
            {
                acur = acur->next;
                bcur = bcur->next;
            }
            return acur;
        }
        else //没有相交
        {
            return NULL;
        }
    }
};

5.OJ练习

LeetCode 160题

上一篇 下一篇

猜你喜欢

热点阅读