By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
432,248 Members | 882 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 432,248 IT Pros & Developers. It's quick & easy.

About Ordered singly linked list..

P: n/a
I'm asking you to help me.
I'm a beginner of studying c++.
I'm trying to make the Singly Linked List(Ordered).
Anyway, I've been debugging all day.
I can't sort it out!!

As you see, I don't know what this is wrong..
When I run this pgm, It can't find the Current Variable.

//
Node *Current = Head;

if (!Head) {
Current = NewNode;
}
//

I think the point Current has Head's Data & Next now.
But It can't find Current variable..
I show you my coding.
If my coding is wrong, please correct it~*

----------------------------------------------------------
// InsertList.cpp
bool List::InsertList(Node *NewNode) {
Node *Previous = NULL;
Node *Current = Head;
if (!Head) // Empty
{
Head = NewNode;
return true;
}
if (NewNode->Data < Head->Data) // The first one.
{
NewNode->Next = Head;
Head = NewNode;
return true;
}
while (Current != NULL && (NewNode->Data > Current->Data)) // Go to Next
Item.
{
Previous = Current;
Current = Current->Next;
}
if (Current->Data == NewNode->Data) {
cout << "Data Redundancy" << endl;
return false;
}
else // In the middle of the list. // the last one.
{
Previous->Next = NewNode;
NewNode->Next = Current;
return true;
}
}
----------------------------------------------------------
//LinkedList.h
#include <iostream.h>
#include <stdlib.h>

class Node {
friend class List;
private:
Node *Next;
int Data;
public:
Node(int i) {
Data = i;
}
~Node() {}
};

class List {
private:
Node *Head;

public:
List() {
Head = NULL;
}
~List() {}
bool InsertList(Node *NewNode);
bool DeleteList(int Key);
void Display();
};
----------------------------------------------------------
Main.cpp
#include "linked_list.h"
void main() {
int MenuNumber, InsertNumber, DeleteNumber;

Node *DataItem;
List A;

cout << "Linked List" << endl;
cout << "Exit: 0 " << endl;
cout << "Insert: 1" << endl;
cout << "Delete: 2" << endl;
cout << "Display: 3" << endl;

cout << "Select Menu : ";
cin >> MenuNumber;

while (MenuNumber != 0) {
switch (MenuNumber) {
case 1:
cout << "Insert Number: ";
cin >> InsertNumber;

DataItem = new Node(InsertNumber);

if (DataItem == NULL) {
cout << "There is no memory" << endl;
exit(0);
}

if (A.InsertList(DataItem))
cout << "Good Insertion" << endl;
else
cout << "Bad Insertion" << endl;
break;

case 2:
cout << "Delete Number: ";
cin >> DeleteNumber;

if (A.DeleteList(DeleteNumber))
cout << "Good Delete" << endl;
else
cout << "Bad Delete" << endl;
break;

case 3:
A.Display();
break;

default:
cout << "Insert Again." << endl;
break;
}

cout << endl;
cout << "Select Menu Again: ";
cin >> MenuNumber;
}
}
---------------------------------------------------------
Display.cpp
#include "linked_list.h"

void List::Display() {
Node *Current = Head;
cout << "List: ";
while (Current != NULL) {
cout << Current->Data << " ";
Current = Current->Next;
}
cout << endl;
}
---------------------------------------------------------
That's it!!~*
Please Help you..
I desperately need your advice & help.. ^^&
Jul 22 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a

"HS-MOON" <mo******@paran.com> wrote in message
news:66******************************@localhost.ta lkaboutprogramming.com...
I'm asking you to help me.
I'm a beginner of studying c++.
I'm trying to make the Singly Linked List(Ordered).
Anyway, I've been debugging all day.
I can't sort it out!!
One error spotted see below.

As you see, I don't know what this is wrong..
When I run this pgm, It can't find the Current Variable.

//
Node *Current = Head;

if (!Head) {
Current = NewNode;
}
//

I think the point Current has Head's Data & Next now.
But It can't find Current variable..
I show you my coding.
If my coding is wrong, please correct it~*

----------------------------------------------------------
// InsertList.cpp
bool List::InsertList(Node *NewNode) {
Node *Previous = NULL;
Node *Current = Head;
if (!Head) // Empty
{
Head = NewNode;
Here you need to set NewNode->Next to NULL

NewNode->Next = NULL;
return true;
}


You might have other errors, I didn't check.

john
Jul 22 '05 #2

P: n/a
> ----------------------------------------------------------
// InsertList.cpp
bool List::InsertList(Node *NewNode) {
Node *Previous = NULL;
Node *Current = Head;
if (!Head) // Empty
{
Head = NewNode;
Previuos=NULL; Next=NULL;
return true;
}
if (NewNode->Data < Head->Data) // The first one.
{
NewNode->Next = Head;

NewNode->Previous = Head->Previous;
Head->Previous = NewNode;

....
Make a diagram where you draw all the pointers after the insertion of
the objects before and after the one that got inserted.
Jul 22 '05 #3

P: n/a
I referenced your tips..
Thanks a lot!!!!!

Anyway, at last, I made it!! ㅠ_ㅠ(So impressed)
Is this right?!
Even though the result is right,
sometimes our pgm is not logically right.

So,I'd like you to answer to me whether this code is logically right or
not.~
------------------------------------------------------
bool List::InsertList(Node *NewNode) {
Node *Current;
Node *Previous;

if (Head == NULL) { // Nothing
NewNode->Next = NULL;
Head = NewNode;
return true;
}

Previous = Head;
Current = Head->Next;

if (Head->Data > NewNode->Data) { NewNode->Next = Head;
Head = NewNode;
return true;
}

if (Head->Data == NewNode->Data) {
cout << "Data Redundancy: Insertion Again!" << endl;
return false;
}

while (Current != NULL) {
if (Current->Data > NewNode->Data) { NewNode->Next = Current;
Previous->Next = NewNode;
return true;
}
if (Current->Data == NewNode->Data) { cout << "Data Redundancy:
Insert Again!" << endl;
return false;
} else {
Previous = Current;
Current = Current->Next;
}
}
NewNode->Next = NULL;
Previous->Next = NewNode;
return true;
}

Jul 22 '05 #4

P: n/a

"Gernot Frisch" <Me@Privacy.net> wrote in message
news:2r*************@uni-berlin.de...
----------------------------------------------------------
// InsertList.cpp
bool List::InsertList(Node *NewNode) {
Node *Previous = NULL;
Node *Current = Head;
if (!Head) // Empty
{
Head = NewNode;


Previuos=NULL; Next=NULL;
return true;
}
if (NewNode->Data < Head->Data) // The first one.
{
NewNode->Next = Head;

NewNode->Previous = Head->Previous;
Head->Previous = NewNode;

...


No, there is no 'Previous' member. He is implementing a singly linked list.
Check his Node class.
Jul 22 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.