I need to draw some singly and double linked lists for a CS paper and I don't know what package should I use. As far as I've searched over the Internet I can't seem to find a good one. Maybe TiKZ/PGF? If so, I would need a little example.

3 Answers 3


Here's a possible solution using TikZ: I used multipart rectangles for the double nodes and a chain to place the nodes.



\begin{tikzpicture}[list/.style={rectangle split, rectangle split parts=2,
    draw, rectangle split horizontal}, >=stealth, start chain]

  \node[list,on chain] (A) {12};
  \node[list,on chain] (B) {99};
  \node[list,on chain] (C) {37};
  \node[on chain,draw,inner sep=6pt] (D) {};
  \draw (D.north east) -- (D.south west);
  \draw (D.north west) -- (D.south east);
  \draw[*->] let \p1 = (A.two), \p2 = (A.center) in (\x1,\y2) -- (B);
  \draw[*->] let \p1 = (B.two), \p2 = (B.center) in (\x1,\y2) -- (C);
  \draw[*->] let \p1 = (C.two), \p2 = (C.center) in (\x1,\y2) -- (D);


enter image description here

  • Thank you! That's exactly what I was looking for! I was looking like a fool in the pgfmanual and I couldn't figure it out. If I could find an index with all the possible options for drawing with tikz I could make all this by myself but I didn't find any... For example now I need to draw a dotted arrow (the body of the arrow to be made from dots like this ...> but then again, I can't find the option, I've tried \draw[.>] or \draw[.] and it doesn't work... Anyway, thank you again! It works perfectly!
    – andrasi
    May 28, 2011 at 14:40
  • @andrasi: You're welcome. For the problem with the arrow, use the dotted option; in one of the arrows in my example, try \draw[dotted,*->]. May 28, 2011 at 14:52
  • The lines which cross out the last rectangle are a bit too long - to solve this: \draw[shorten <= 1pt, shorten >= 1pt] (D.north east) -- (D.south west); \draw[shorten <= 1pt, shorten >= 1pt] (D.north west) -- (D.south east);
    – Daniel F
    Jun 4, 2015 at 16:47

Users only need to modify the following values and keep the names remain unchanged.

% user defined data
\def\list{12,99,37}% list of elements
\const{_W}{2}% node width
\const{_H}{1}% node height
\const{_D}{1.5}% arrow length

enter image description here


\newcommand\const[3][\FPeval]{% #1=method, #2=name, #3=data
     \noexpand\pstVerb{/#2 \csname#2\endcsname\space def}}\x


% user defined data
\def\list{12,99,37}% list of elements
\const{_W}{2}% node width
\const{_H}{1}% node height
\const{_D}{1.5}% arrow length

% internal used constants
\const[\FPnset]{_N}{\list}% number of nodes

\const{CanvasHeight}{_H}% Canvas Height = _H
\const{CanvasWidth}{_NL * _N + _HW}% Canvas Width = _NL*_N+_HW

    \rput(!_NL #2 mul 0){%
        \psframe(!_W _H)%
        \rput(!_QW _HH){#1}%
        \psline(!_HW 0)(!_HW _H)%
        \psline[arrowscale=2]{*->}(!_TQW _HH)(!_NL _HH)%     

    \rput(!_NL _N mul 0){%
        \psframe(!_HW _H)%
        \psline(!_HW _H)%
        \psline(!0 _H)(!_HW 0)%  





Graphviz is an easy-to-use tool that lets one specify graphs without worrying too much about how they appear. The dot language is easy. Here is a singly-linked list:

foo -> bar
bar -> baz
baz -> qux

Making this bidirectional is almost as easy. You could specify that each node is bidirectional. Even easier, specify that all nodes are bidirectional:

edge [dir=both]
foo -> bar
bar -> baz
baz -> qux

There are a number of avenues to import your .dot file as a graphic in your LaTeX document. If you are using pdflatex, pipe the output of the dot command (specifying output format=ps) that comes with graphviz to ps2pdf to generate a .pdf file. You can \includegraphics this .pdf into your document.

Don't like the mixed up fonts that result? Use dot2text to convert the .dot file to latex as a series of pstricks commands.

  • 1
    Sounds interesting! Could you add a screenshot of the output?
    – Jake
    May 28, 2011 at 14:00
  • New to this forum: How to upload screenshots? And it looks like comments are only for very simple text. May 28, 2011 at 15:59
  • @David: Yes, comments only allow for very basic text markup. You can, however, edit your answer to include a screenshot. See Markdown help -- images, but basically you can just click the button with a photo on it.
    – doncherry
    Jul 26, 2011 at 21:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.