目录
1.判断链表是否有环,有则返回环节点
struct Node
{
Node(int v) :m_next(NULL), m_value(v) {}
int m_value;//值
Node* m_next;//指向下一个节点的指针
};
Node* IsCircle(Node* head)
{
//找相同的地址,有则有环,反之无环,数据有可能一样,但是地址肯定不一样
set<Node*> ss;//新的容器
Node* p = head;
while (p != NULL)
{
if (ss.find(p) != ss.end())
{
return p;
}
ss.insert(p);
p = p->m_next;
}
return p;
}
void main()
{
Node* head = NULL;
Node a(1), b(2), c(3), d(4), e(5);
head = &a;//头节点指向第一个有数值的节点的地址
a. m_next = &b;//创建链表
b.m_next = &c;
c.m_next = &d;
d.m_next = &e;
e.m_next = &c;
Node* p = IsCircle(head);
if (p != NULL)
{
cout << "有环" << endl;
cout << p->m_value << endl;
}
else
cout << "无环" << endl;
}
截图:
总结:相比用C去写这些代码,STL的关联式容器更加简单。