1.题目: (环形链表)
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
2. 示例
3.解答步骤
思路都在注释上! 请大家自主阅读程序!
⭐ 本篇注意点: 为什么要用快指针当中循环终止条件
答: 因为假如不出现环状的情况,使用慢指针当中终止循环条件时,会出现快指针的空指针异常!
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
// 通过快慢指针实现
// 定义一个快指针fast和慢指针slow
ListNode fast, slow;
fast = slow = head;
// 然后开始循环
// 假如快指针能够顺利走完则说明没环
// 这里为什么必须使用快指针当做循环终止的条件
// 因为假如没环的情况下,会出现快指针空指针异常
while(fast != null && fast.next != null) {
// 快指针一次走两步
fast = fast.next.next;
// 慢指针一次走一步
slow = slow.next;
// 假如快慢指针能相遇说明有环
if(slow == fast)
return true;
}
// 如果循环顺利结束,说明没环
return false;
}
}