练习:链表中环的入口节点

练习:链表中环的入口节点

1、题目要求

给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

2、我的代码

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead)
    {
        if(pHead == NULL) return NULL;
        ListNode* p1 = pHead, * p2 = pHead;
        do {
            p1 = p1->next;
            p2 = p2->next;
            if(p2) p2 = p2->next;
        } while(p1 && p2 && p1 != p2);

        if(!p1 || !p2) return NULL;

        int k = 0;
        do {
            p2 = p2->next;
            k++;
        }while(p1 != p2);
        p1 = pHead, p2 = pHead;
        for(int i = 0;i < k;i++) {
            p2 = p2->next;
        }
        while(p1 && p2 && p1 != p2) {
            p1 = p1->next;
            p2 = p2->next;
        }
        return p1;
    }
};

猜你喜欢

转载自blog.csdn.net/houzijushi/article/details/81159570
今日推荐