leetcode141. Linked List Cycle

来源:互联网 发布:stm32 pid控制算法 编辑:程序博客网 时间:2024/06/15 16:37

leetcode141题是判断链表是否有环,最常用的方法是用两个指针,一个快一个慢,快的是慢的速度的一倍,这样如果有环的话两个一定会相遇。这样最慢需要遍历2N遍就可以完成判断。自己还想了一种方法,这种方法坏处是需要破坏链表,但是需要N遍就可以AC.先写第一种方法


class Solution {public:    bool hasCycle(ListNode *head) {      ListNode *fast = head;      ListNode *slow = head;      while(fast != NULL && fast->next != NULL)      {          slow = slow->next;          fast = fast->next->next;          if(slow == fast)            return true;      }      return false;    }};

第二种方法需要破坏链表结构,但是可以判断,可以AC。
class Solution {public:    bool hasCycle(ListNode *head) {      ListNode *cur = NULL;      ListNode *pre = NULL;      if(head != NULL)          cur = head->next;      while(cur) {         if(cur == head) //判断是否指向头结点             return true;         pre = cur;         cur = cur->next;         pre->next = head; //把遍历过的节点全指向头结点      }      return false;    }};


                                             
0 0
原创粉丝点击