The specification of any polyline is a little optimistic (given the possibility of duplicate geometries), but for a topologically correct network it can be done using a virtual layer"Virtual Layer" through Layer > Add Layer > Add/Edit Virtual Layer...
.
This query first collects all start and end points into one table, then selects those points which intersect only once with the lines layer.
Assuming the line layer is called edges
'edges' and its geometry field is called geometry
:
SELECT * from
FROM (
(SELECT ST_StartPoint(geometry) AS geom
FROM edges
UNION
SELECT ST_EndPoint(geometry) AS geom
FROM edges
) AS startend
JOIN edges
ON ST_Intersects(startend.geom, edges.geometry)
GROUP BY startend.geom
HAVING COUNT(*) = 1
Note: The seemingly missing point towards the lower left of the image is actually a cul-de-sac and not a dangle!