Hey guys, I'm new to this forum, but I have been programming in C for a little while. In a project that I'm currently doing, I keep getting segfaults, but I can't figure out why. When I run the program in gdb, it tells me the problem is coming from my "additem(...)" method, but I can't see anything wrong there, unless the malloc is incorrect. Anyway, any help would be greatly appreciated. Here's my code:

Code:
#include <stdio.h>
#include <stdlib.h>

/* Step 1: define your struct here */
struct node
{
	int data1;
	int data2;
	int L1;
	int L2;
	struct node * next1;
	struct node * next2;
}; 

typedef struct node *nodePtr;
nodePtr head = NULL;
nodePtr tail = NULL;
nodePtr head2 = NULL;

/* Step 2: put code in the functions below to make the list work. */


void clearList ()
{
	nodePtr this = NULL;
	nodePtr next = NULL;
	if (head != NULL)
	{
		this = head;
		while ((this->next1) != NULL)
		{
			next = (this->next1);
			free(this);
			this = next;
		}
		free(this);
	}
}

void addToList (int data1, int data2)
{
	nodePtr newnode = (nodePtr) malloc(sizeof(struct node));
	nodePtr iter = head;
	nodePtr temp = NULL;
	newnode->data1 = data1;
	newnode->data2 = data2;
	newnode->next1 = NULL;
	newnode->next2 = NULL;
	newnode->L1 = 0;
	newnode->L2 = 0;
	if (!head)
	{
		head = newnode;
		head2 = newnode;
	}
	else if (data1 < (head->data1))
	{
		newnode->next1 = head;
		head = newnode;
	}
	else
	{
		while((data1 > (iter->data1)) && (iter != NULL))
		{
			temp = iter;
			iter = (iter->next1);
			newnode->L1++;
		}
		temp->next1 = newnode;
		newnode->next1 = iter;
		if (newnode->next1 == NULL)
			tail = newnode;
		else
		{
			while(iter->next1 != NULL)
			{
				iter->L1++;
				iter = iter->next1;
			}
			iter->L1++;
		}
	}
	if(head2)
	{
		if (data2 < (head2->data2))
		{
			newnode->next2 = head2;
			head2 = newnode;
		}
		else
		{
			iter = head2;
			while((data2 > (iter->data2)) && (iter != NULL))
			{
				temp = iter;
				iter = (iter->next2);
				newnode->L2++;
			}
			temp->next2 = newnode;
			newnode->next2 = iter;
			if (iter != NULL)
			{
				while(iter->next2 != NULL)
				{
					iter->L2++;
					iter = iter->next1;
				}
				iter->L2++;
			}
		}
	}
}

void printFirst ()
{
	nodePtr iterator = head;
	while( (iterator->next1) != NULL)
	{
		printf("%d , %d \n", iterator->data1, iterator->data2);
		iterator = (iterator->next1);
	}
	printf("%d , %d \n", iterator->data1, iterator->data2);
}

void printSecond ()
{
	nodePtr iterator2 = head2;
	while( (iterator2->next2) != NULL)
	{
		printf("%d , %d \n", iterator2->data1, iterator2->data2);
		iterator2 = (iterator2->next2);
	}
	printf("%d , %d \n", iterator2->data1, iterator2->data2);
}

int disparity ()
{
	return 0;
}
EDIT: Wow...that looks like a gigantic block of code, sorry about that! but I'm pretty sure the problem lies somewhere in "Addtolist"....