I'll be nice and post an answer, but please do make complete examples in the future, so that we, for example, don't have to reverse engineer which libraries you've used.
Anyways, the double dot is because you've used edge, use to instead, as in tikz-cd Extra arrow tip with start anchor on edge v0.9b
With regard to the cross out, use the one split south and one split north anchors, which are at either end of the line separating the node parts.
Other things:
I replaced the arrows library with arrows.meta, and the corresponding arrow tips from that (arrows still work, but is considered deprecated, see the manual).
You can use the coordinate specification (a |- b) to get the point at the x-coordinate of a and y-coordinate of b, which is somewhat less verbose than the calc syntax you used. (But which one you prefer is a matter of preference.)
The to path at the end extends the bounding box quite a bit, so I added a manual fix for that. (Uncomment the \useasboundingbox line to see the difference.)

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{
chains,
shapes.multipart,
arrows.meta % supersedes the arrows library
}
\begin{document}
\begin{tikzpicture}[
list/.style={
rectangle split,
rectangle split parts=2,
draw,
rectangle split horizontal
},
dotarrow/.style={Circle-Stealth},
start chain
]
\node[list,on chain] (A) {12};
\node[list,on chain] (B) {99};
\node[list,on chain] (C) {37};
\node[list,on chain] (D) {\phantom{xx}};
\draw (D.north east) -- (D.one split south);
\draw (D.south east) -- (D.one split north);
\draw[dotarrow] (A.two |- A.center) -- (B);
\draw[dotarrow] (B.two |- B.center) -- (C);
\draw[dotarrow] (C.two |- C.center) -- (D);
% the to path below extends the bounding box a lot, this fixes that
\useasboundingbox ([shift={(-1.3cm,0)}]A.north west) rectangle ([shift={(1cm,-7mm)}]D.south east);
\draw[dotarrow] (D.two |- D.center) to[out=-10,in=190,distance=6cm] (A);
\end{tikzpicture}
\end{document}