I can't seem to figure out what your insert algorithm is. Can you explain it? I spent about 5 minutes looking at it and it's all a jumble.
A few comments:
--Make liberal use of comments. // for single line comments /* */ for multi-line comments.
--Use good variable names. That means names that tell the reader of the code what you're doing. (Try temporary, current, previous, or temp, cur, prev if you're lazy.)
--Don't assume pointers are NULL. Initialize them when you declare them.
If you use GCC to do your compilation, I'm sure there's a program installed called gdb. It's a wonderful program (IMO) to use once you learn how. It's really really useful for debugging C++ because it will let you know WHERE the program failed and at your request will display a variable's contents before it fails. You need to compile with debug points in: