这个题大致意思就是判断链表中是否有环
第一次使用快慢指针解题,觉得很新鲜,记录一下
bool hasCycle(struct ListNode *head) {
struct ListNode *slow = head;
struct ListNode *fast = head;
while (fast && fast->next) {
fast = fast->next->next;
slow = slow->next;
if (fast == slow) {
return true;
}
}
return false;
}
意思就是定义两个指针同时指向头结点,接下来循环的时候快指针总比满指针多走一个next,慢慢的两个指针的差距就会越拉越大,如果不是环型链表,两个指针永远不会相遇,一旦链表是环形的,两个指针迟早会相遇。
想象一下平时你和你的好朋友都在操场(环形的)跑步,你比他跑的快一些,你们两个同时出发,如果你比他快很多,那么过不了一会你就可以和他第一次相遇了,这个时候你恰好比他多跑一圈。快慢指针也是一个道理。
注意while循环里面有两个条件,fast , fast->next同时不为空。缺一不可。
因为你的循环体里面有fast->next->next,如果fast->next为空,这句话就没有意义了,就可以提前结束循环了。