判断单链表是否有环

判断单链表是否有环

问题

这个题目说的是,给你一个单链表,你要判断它是否会形成环,也就是链表的最后一个节点指向了前面一个已经存在的节点。

代码

public class AlgoCasts {

  public class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
      val = x;
    }
  }

  // Time: O(n), Space: O(n)
  public boolean hasCycleWithHashSet(ListNode head) {
    Set<ListNode> set = new HashSet<>();
    for (ListNode p = head; p != null; p = p.next) {
      if (set.contains(p)) return true;
      set.add(p);
    }
    return false;
  }

  // Time: O(n), Space: O(1)
  public boolean hasCycleWithTwoPointer(ListNode head) {
    ListNode fast = head, slow = head;
    while (fast != null && fast.next != null) {
      fast = fast.next.next;
      slow = slow.next;
      if (fast == slow) return true;
    }
    return false;
  }

}

  转载请注明: ForwardXu 判断单链表是否有环

 上一篇
有序数组中查找数字的开始和结束下标 有序数组中查找数字的开始和结束下标
有序数组中查找数字的开始和结束下标问题 这个题目说的是,给你一个递增排序的数组和一个目标值,你要找到目标值在这个数组中的开始下标和结束下标。如果找不到目标值,就返回 [-1, -1]。 比如说,给你的递增数组是: 1, 2, 2, 4,
2018-12-26
下一篇 
求两个单链表之和 求两个单链表之和
求两个单链表之和问题 这个题目说的是,给你两个非空的单链表,它们代表两个非负整数,并且逆序表示。你要将这两个数求和,并将结果以链表形式返回。你不需要考虑前导 0 这种情况,也就说 3 不会表示成 003 这样子。 比如说给你的两个链接表是:
2018-12-26
  目录