首页 > 代码库 > careercup-链表 2.6

careercup-链表 2.6

2.6 给定一个有环链表,实现一个算法返回环路的开头结点。

类似leetcode中 Linked List Cycle II

C++实现代码:

#include<iostream>#include<new>using namespace std;struct ListNode{    int val;    ListNode *next;    ListNode(int x):val(x),next(NULL) {}};void createList(ListNode *&L){    int arr[10]= {1,2,3,2,5,6,7,4,9,1};    int i;    ListNode *p=NULL;    ListNode *t=NULL;    for(i=0; i<10; i++)    {        ListNode *tmp=new ListNode(arr[i]);        if(L==NULL)        {            L=tmp;            p=tmp;        }        else        {            if(arr[i]==4)                t=tmp;            p->next=tmp;            p=tmp;        }    }    p->next=t;}ListNode *detectCycle(ListNode *L){    if(L==NULL)        return NULL;    ListNode *pre=L;    ListNode *p=L;    while(p&&p->next)    {        p=p->next->next;        pre=pre->next;        if(pre==p)            break;    }    if(p==NULL||p->next==NULL)        return NULL;    p=L;    while(p!=pre)    {        p=p->next;        pre=pre->next;    }    return p;}int main(){    ListNode *head=NULL;    createList(head);    ListNode *p=NULL;    p=detectCycle(head);    if(p)        cout<<p->val<<endl;}

 

careercup-链表 2.6