Point cloud is a collection of 3D coordinates that are discrete geometric samples of an object's 2D surfaces. Imperfection in the acquisition process means that point clouds are often corrupted with noise. Building on recent advances in graph signal processing, we design local algorithms for 3D point cloud denoising. Specifically, we design a reweighted graph Laplacian regularizer (RGLR) for surface normals and demonstrate its merits in rotation invariance, promotion of piecewise smoothness, and ease of optimization. Using RGLR as a signal prior, we formulate an optimization problem with a general p-norm fidelity term that can explicitly model two types of independent noise: small but non-sparse noise (using 2 fidelity term) and large but sparser noise (using 1 fidelity term).To establish a linear relationship between normals and 3D point coordinates, we first perform bipartite graph approximation to divide the point cloud into two disjoint node sets (red and blue). We then optimize the red and blue nodes' coordinates alternately. For 2-norm fidelity term, we iteratively solve an unconstrained quadratic programming (QP) problem, efficiently computed using conjugate gradient with a bounded condition number to ensure numerical stability. For 1-norm fidelity term, we iteratively minimize an 1-2 cost function sing accelerated proximal gradient (APG), where a good step size is chosen via Lipschitz continuity analysis. Finally, we propose simple mean and median filters for flat patches of a given point cloud to estimate the noise variance given the noise type, which in turn is used to compute a weight parameter trading off the fidelity term and signal prior in the problem formulation. Extensive experiments show state-of-the-art denoising performance among local methods using our proposed algorithms.