Turn your Mobile Apps into m-commerce apps – Learn More!

You're Browsing As A Guest! Register Now...
Become a C++ Expert!

Join 415,729 C++ Programmers for FREE! Get instant access to thousands of C++ experts, tutorials, code snippets, and more! There are 1,844 people online right now.Registration is fast and FREE... Join Now!



Linked list Problem in my code, please help Rate Topic: -----

#1 CIS_Soldier87  Icon User is offline

  • New D.I.C Head
  • Pip

Reputation: 0
  • View blog
  • Posts: 2
  • Joined: 30-October 07


Dream Kudos: 0

Share |

Linked list

Post icon  Posted 30 October 2007 - 05:51 AM

Good evening everyone.

I'm a CIS student and I wrote an implementation for a Linked List code while studying for my test tomorrow.

Everything seems to work perfectly except that there are four problems that need solutions:


# include <iostream>
using namespace std;

# include <cstdlib>
# include <ctime>

# include <assert.h>


template <class E>

class LinkedList

{

protected:

	struct node
	{

		E data;
		node *next;

	};

	node *myCurrent;
	node *myPrevious;
	node *myFirst;
	 int mySize;

	 node* getNode(const E &e)
 {

	 node* newNode = new node;
	 assert (newNode !=0 );

	 newNode -> data = e;
	 newNode -> next = 0;

	 return newNode;
 }

	 void removeNode(E val)
	 {

		 node* remv;

			 remv = myCurrent;

		 	 myPrevious -> next = myCurrent->next;
			 myCurrent -> next = NULL;
			 myCurrent = myPrevious;

			 delete remv; /*next = NULL*/

			 
			 myCurrent = myCurrent -> next;
			 
			 //nextNode();

	 }

public:
	
	LinkedList<E>()
		: myCurrent(0), myPrevious(0)
	{

		mySize = 0;
		myFirst = 0;

	}

 E access()
 {
	 assert (myCurrent != 0);

	 return myCurrent -> data;
	 
 }
 


 void nextNode()
 {
	 assert (myCurrent != 0);

	 myPrevious = myCurrent;
	 myCurrent = myCurrent -> next;

}

 void insert (const E &e1)
 {

	 node* newnode = getNode(e1);

	 if (mySize != 0 || myCurrent == myFirst)

		 myFirst = newnode;

	 else

		 myPrevious->next = newnode;

	 newnode->next = myCurrent;
	 myCurrent = newnode;
	 mySize++;

	 



 }

 void First()
 {

	 assert (mySize != 0);

	 myCurrent = myFirst;
	 myPrevious = NULL;

 }


	LinkedList( LinkedList& lcopy)
		//:mySize(0),myCurrent(0),myPrevious(0),myFirst(0)
 {

	 lcopy.First();

	 while (lcopy.myCurrent->next != NULL)
	 {
		 insert (lcopy.myCurrent->data);
		 lcopy.nextNode();
		 nextNode();

		 lcopy.mySize++;
	 }
	 /*mySize = lcopy.mySize;*/
 };


 void printList()
 {
	 if (mySize == 0 || myFirst == NULL)
		 cout << "List is empty. " << '\n';

	 else

		First();

		 for (int i = 0; i < mySize; i++)
		 {
			 cout << myCurrent -> data << ' ';
						   
			 nextNode();
		 }
			
 }

 void removeValue(E v)
 {
	 First();

	 for (int i = 0; i < mySize; i++)
	 {

		 if (myCurrent -> data == v)
		 {
			 removeNode(v);
		 }






			 //myPrevious -> next = myCurrent->next;
			 //delete myCurrent -> next; /*next = NULL*/
			 //myCurrent = myPrevious -> next;
			 //nextNode();
		 
	 }
		 
	 }

 };





	 void main()

	 {

		 LinkedList<int> l1;
		 /*LinkedList<int> l2(l1);*/
		 
		 srand(time(0));

		 int b = 1;

		  for (int i = 14; i >= 1; i--)
		  {
			  l1.insert(b);
			  b++;
			  l1.nextNode();
		  
		  }

		 l1.printList();

		 l1.removeValue(4);

		 cout << '\n';
		 cout << '\n';

		 l1.printList();

	 }

		 








First one: is in the copy constructor, it produces a runtime error.

Second one: in either the nextNode() function or the insert() function, a runtime error occurs when
attempting to call the nextNode() function from the main();

Third one: is with printList() function, it prints the elements of the list oppositely (i.e., 54321 instead of 12345).

Fourth one: Is in the removeNode() function, it doesn't produce any errors, but it still doesn't work.

Please help me.
Thanks.

This post has been edited by CIS_Soldier87: 30 October 2007 - 06:54 AM

Was This Post Helpful? 0
  • +
  • -



Fast Reply

  

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users