code: public final void addChildrenAfter(@Nullable Node children, @Nullable Node node) {
      if (children == null) {
        return; // removeChildren() returns null when there are none
      }
      checkArgument(node == null || node.parent == this);
      // NOTE: If there is only one sibling, its previous pointer must point to itself.
      // Null indicates a fully detached node.
      checkNotNull(children.previous, children);
      if (node == null) {
        addChildrenToFront(children);
        return;
      }
  
      for (Node child = children; child != null; child = child.next) {
        checkArgument(child.parent == null);
        child.parent = this;
      }
  
      Node lastSibling = children.previous;
      Node nodeAfter = node.next;
      lastSibling.next = nodeAfter;
      if (nodeAfter == null) {
        first.previous = lastSibling;
      } else {
        nodeAfter.previous = lastSibling;
      }
      node.next = children;
      children.previous = node;
    }
docs: Add all children after 'node'. If 'node' is null, add them to the front of this node.
  
  @param children first of a list of sibling nodes who have no parent.
  NOTE: Usually you would get this argument from a removeChildren() call.
  A single detached node will not work because its sibling pointers will not be
  correctly initialized.