Software-Defined Networking (SDN) is a network paradigm introduced to overcome the inherent challenges of traditional networks. Its architecture is either deployed with a single controller or multiple controllers. While the first is not suitable for large-scale networks, the latter is confronted with a controller placement problem (CPP) in a large-scale network environment. CPP involves the challenge of deploying the optimal number of controllers within a network while meeting certain performance requirements considered conflicting in nature such as reliability, load balancing, latency, energy efficiency, and computation time. A single optimal or random placement may not be feasible in CPP and careful planning is of the essence to find an appropriate trade-off among the metrics. To achieve this, several CPP approaches have been proposed, developed, and deployed over the years, each having its unique objectives, strengths, and weaknesses. Therefore, this paper performed a comprehensive review of some of the existing approaches to identify the unique solutions offered, comprehend the different strategies and the challenges that exist as well as provide researchers with future directions aimed at improving the optimum location and allocation of controllers, in particular, for SDN application in wireless sensor network (WSN). The findings revealed several existing solutions and algorithms as well as several challenges such as the need for an efficient algorithm, attack-aware, cost-aware, and energy-aware CPP schemes while achieving a good quality of service.