I think I might have done something right, headByRating and headByName both refer to the same address.
I have been drawing diagras working all day trying new things etc,
Why are you rolling your own linked list? Why not use std::list
?
If it's for the double-sorting thing, two separate lists of pointers would work, and be a hell of a lot easier if you can then use the provided container classes.
Or alternatively, if you need to sort it, is a linked list the best option? std::vector
is often easier for sorting, or std::set
maintains the order itself.
It looks like you have several problems here:
I'd recommend removing everything from this method and writing high-level pseudo code in its place. Then create a smaller method for each line of pseudo code. Smaller logical methods called inside insert will help it make sense.
If you want to make your List type for experimentation, do it, otherwise use std::list.
If you want to keep your list sorted while you insert new elements then you have to implement an ordered list.
It's better to remove "winery field" dependencies from your List. A node should have only one next node, not many. You are making a List, not a Tree.
// list.h
struct node
{
winery item;
node * next;
};
class list
{
...
private:
node * head;
};
You can't have one List ordered by different winery fields.
Make a new type, like CWinery, which will act as a container for your winery records.
In there, you can have a list to store your elements and methods to sort it or whatever you need.
If you are need to use list with several indexes you should consider using boost::multi_index instead of inventing the wheel.