判断链表是否带环?如果带环,环的长度是多少?环的入口节点是什么?
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x)
:val(x), next(NULL)
{}
};
//判断链表是否带环?
ListNode* IsLoop(ListNode* pHead)
{
if (NULL == pHead)
{
return NULL;
}
ListNode* pfast = pHead;
ListNode* pslow = pHead;
while (pHead->next != NULL && pHead->next->next != NULL)
{
pfast = pfast->next->next;
pslow = pslow->next;
if (pfast == pslow)
{
return pslow;
}
}
return NULL;
}
//若带环求环的长度?说明已经存在环
int GetLoopListLen(ListNode* pMeetNode)
{
if (pMeetNode == NULL) //pMeetNode为快慢指针相遇点
return 0;
int count = 0;
ListNode* cur = pMeetNode;
while (cur != pMeetNode)
{
++count;
cur = cur->next;
}
return count;
}
//若带环求环的入口点?
ListNode* EntryNodeOfLoop(ListNode* pHead, ListNode* pMeet)
{
if (NULL == pHead && NULL == pMeet)
{
return NULL;
}
ListNode* pFirst = pHead;
ListNode* pSecond = pMeet;
while (pFirst != pMeet)
{
pFirst = pFirst->next;
pSecond = pSecond->next;
}
return pFirst;
}
设计一个类不能被继承
class A
{
public:
static A GetA()
{
A a;
return a;
}
static void deleteA(A* a)
{
delete a;
a = NULL;
}
private:
A()
{
cout << "A" << endl;
}
~A()
{
cout << "~A" << endl;
}
};
设计一个类只能在栈上创建对象。 class StackType
{
public:
static StackType* CreateObject()
{
return new StackType;
}
private:
StackType()
{}
int _p;
};
设计一个类只能在堆上创建对象。 class HeapType
{
public:
static HeapType* CreateObject()
{
return new HeapType;
}
private:
HeapType()
{}
int _p;
};