954,500 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

need help with Linked list

Hey, Im having some trouble with linked lists, I have been givin a task where I am asked to crreate a linked list which reads in a random set of chars from a .txt file and stores them in a linked list, then prints them out in a seperate function.

here is my code

#include <iostream>
#include <fstream>

using namespace std;

struct node
{
	char base;
	node* next;
};

void initialise(node*& head);
void read(node*& head);
void print(node*& head);

int main()
{
	node* head = NULL;
	
	cout << "Set linked list to NULL" << endl;
	initialise(head);

	cout << "Reading from file into linked list" << endl;
	read(head);

	cout << "Printing out linked list" << endl;
	print(head);

	return 0;
}
void initialise(node*& head)
{
	head = NULL;
}
void read(node*& head)
{
	node* temp;
	char filename[40];
	ifstream ins;

	cout << "Filename: ";
	cin >> filename;

	ins.open(filename, ios::in);
	temp = new node;
	if (temp == NULL)
	{
		cout << "An error occured: " << endl;
		exit(0);
	}
	if(ins.good())
	{
		while(!ins.eof())
		{
			ins >> temp->base;
			temp->next = NULL;

			if (head == NULL)
				head = temp;
			else
			{
				node* z;
				z = head;
	
				while (z->next != NULL)
				{
					z = z->next;
				}
				z->next=temp;
			}
		}
	}
}
void print(node*& head)
{
	node* temp;
	temp = head;
	while (temp != NULL)
	{
		cout << temp->base << endl;
		temp = temp->next;
	}
}

text file contains random chars, like "AINFUEH EIUDNUIEW IWEUNF" and whitespaces are ignored.

for some reason, when it prints out, it gets stuck in a loop and only prints out the last char in the text file over and over...

can someone please tell me what im doing wrong?

opposition
Newbie Poster
17 posts since Sep 2008
Reputation Points: 10
Solved Threads: 0
 

Looks to me like no new nodes are created in this loop:

while(!ins.eof())
		{
			ins >> temp->base;
			temp->next = NULL;

			if (head == NULL)
				head = temp;
			else
			{
				node* z;
				z = head;
	
				while (z->next != NULL)
				{
					z = z->next;
				}
				z->next=temp;
			}
		}


You are just continually putting a new value into temp->base and overwriting the old value. As for the infinite loop, I haven't tested it out, but I'm guessing that temp == temp->next and possibly head == temp. You need to create a new node every time you read a new value from the input file.

VernonDozier
Posting Expert
5,527 posts since Jan 2008
Reputation Points: 2,633
Solved Threads: 711
 
You are just continually putting a new value into temp->base and overwriting the old value.

haha thank you very much, that was exactly my problem, I originally had it reading from cin, and forgot to move my new node line into the eof loop, works perfectly now :)

+rep :)

opposition
Newbie Poster
17 posts since Sep 2008
Reputation Points: 10
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You