successor should return nil if there is no successor