在链表中,可以用**”快慢指针”**解决大多数问题,但根据问题的不同,快慢指针的步长及边界的处理要多加小心
其他解决方法例如:
- 虚拟头节点
- 双指针
- 双指针+临时指针
链表问题中,一定不能丢失指针,或对空指针进行异常操作;有pre->next->next的操作时,一定要判断存不存在这个位置;pre->next同理,可能在pre处就为NULL了
这里以Leetcode题单141和142环形链表为例,利用快慢指针代码解决这两个问题
141:给一个链表的头节点,判断这个链表是不是环形链表,返回值为true或false
1 | //此题中,慢指针的步长为1,快指针的步长为2 |
142:给一个链表的头节点,判断这个链表是不是环形链表,如果是环形链表,返回入环的第一个节点;如果不是环形链表,返回null
1 | //142和141的不同在于:142在141的基础上需要找到入环的位置,前面判断是否为环的操作是一样的 |