判断链表是否存在环形链表

来源:互联网 发布:软件测试工程师难学不 编辑:程序博客网 时间:2024/05/22 15:40

如何解决链表中是否存在链表的问题:

设置两个指针p1, p2,每次p1向前走一步,p2向前走两步,直到p2碰到NULL或两个指针相等时结束循环。

如果两个指针相等,则说明该链表存在环。

程序实现:

//判断链表是否存在环bool isLoop(ListNode *head) {ListNode *p1, *p2;p1 = p2 = head->next;if(head == NULL || head->next == NULL) {return false;}do{p1 = p1->next;//p1走一步 p2 = p2->next->next;//p2走两步 }while(p2 && p2->next && p1 != p2);if(p1 == p2) {return true;} else {return false;}} 

测试用例:

int main(){int pos, data;ListNode *head, *item, *p, *q;head = create_list();cout << endl;print_list(head);p = head->next;if(p != NULL) {q = p->next;}while(q) {p = p->next;q = q->next;}p->next  = head->next;bool flag = isLoop(head);cout << "list is loop ? " << flag << endl;}




0 0