赞
踩
快慢指针是解决链表环问题的一个常见技巧
在这个方法中,我们设置两个指针,一个快指针(每次移动两步)和一个慢指针(每次移动一步)
通过快慢指针找到中间节点,快指针每次走两步,慢指针每次走一步,当快指针走到结尾的时候,慢指针正好走到中间位置
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* middleNode(struct ListNode* head) { struct ListNode *fast; struct ListNode *slow; fast = slow = head; while(fast && fast->next) { slow = slow->next; fast = fast->next->next; } return slow; }
定义快慢指针fast,slow, 如果链表确实有环,fast指针一定会在环内追上slow指针
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ bool hasCycle(struct ListNode *head) { if(head == NULL || head->next == NULL) { return false; } struct ListNode *fast; struct ListNode *slow; fast = head->next; slow = head; while(slow != fast) { if(fast == NULL || fast->next == NULL) { return false; } slow = slow->next; fast = fast->next->next; } return true; }
微语:迎着扑面而来的风,点点星光,以及街道两边那道无限往外延伸、延至天边的光
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。