May 17, 2015 at 12:23pm UTC
Hi, i am new in linked list, and now i face a problem on how to add the node into middle of a list. Example like if i got a name list show below:
1.andrew
2.eric
3.madness
4.gerik
Now how can i put 'gerik' in the middle that is below eric and above madness.
Below will be my example code, please help me thank by giving me advise or code sample:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
#include <iostream>
#include <string>
#include <cstdlib>
#include <cstring>
using namespace std;
struct node
{
char f_name[20];
char l_name[20];
char u_id[10];
node *next;
};
node *head;
node *curr;
//prototype
void display();
void add();
void search_name();
void insert_data(node *tempnode);
void insert_before_head(node *tempnode);
void menu(char choice);
char pause;
//function start...
void search_name()
{
char name[20];
curr = head;
cin.ignore(30,'\n' );
cout<<"Key In Last Name :" <<endl;
cin.get(name, 20);
cin.ignore(30,'\n' );
while ((curr->next != NULL) && (strcmp(curr->l_name, name) != 0))
{
curr = curr->next;
}
if (curr != NULL)
{
cout<<"Record Found !" <<endl;
cout<<"First Name" <<setw(16)<<"Last Name" <<setw(16)<<"User ID" <<endl;
cout<<"--------------------------------------------------------------" <<endl;
cout<<curr->f_name<<setw(20)<<curr->l_name<<setw(16)<<curr->u_id<<endl<<endl;
}
else
{
cout<<"No Match !" <<endl;
cout<<"Press 'Enter' To Continue" <<endl;
cin.get(pause = getch());
system("cls" );
}
};
void display()
{
curr = head;
if (head != NULL)
{
cout<<"First Name" <<setw(16)<<"Last Name" <<setw(16)<<"User ID" <<endl;
cout<<"--------------------------------------------------------------" <<endl;
while (curr != NULL)
{
cout<<curr->f_name<<setw(20)<<curr->l_name<<setw(16)<<curr->u_id<<endl;
curr = curr->next;
}
}
else
{
cout<<"No Data. File storage Empty!" <<endl;
}
};
void add()
{
node *temp;
temp = new node;
cin.ignore(30, '\n' );
cout<<"Key In First Name:" <<endl;
cin.get(temp->f_name, 20);
cin.ignore(30, '\n' );
cout<<"Key In Last Name:" <<endl;
cin.get(temp->l_name, 20);
cin.ignore(30, '\n' );
cout<<"Key In Your ID:" <<endl;
cin.get(temp->u_id, 10);
insert_data(temp);
};
void insert_data(node *tempnode)
{
node *temp;
if (head == NULL)
{
node *temp;
temp = new node;
temp = head;
tempnode->next = NULL;
head = tempnode;
}
else if (strcmp(tempnode->l_name, head->l_name) < 0)
{
insert_before_head(tempnode);
}
else
{
temp = new node;
curr = head;
while (curr->next != NULL)
{
curr = curr->next;
}
temp = tempnode;
curr->next = tempnode;
tempnode->next = NULL;
}
};
void insert_before_head(node *tempnode)
{
node *temp;
if (head != NULL)
{
temp = new node;
temp = tempnode;
tempnode->next = head;
head = tempnode;
}
};
void menu(int choice)
{
switch (choice)
{
case 1 :
add();
break ;
case 2:
display();
break ;
case 3:
search_name();
break ;
case 4:
cout<<"Exit Program !" <<endl;
break ;
default :
cout<<"Error! Program Terminate !" <<endl;
}
};
int main()
{
int choice;
node *temp;
head = NULL;
curr = NULL;
cout << "Data Stack Head And Any Position !" << endl;
system("cls" );
do {
cout<<"1. Add Data." <<endl;
cout<<"2. Show Data. " <<endl;
cout<<"3. Search Last Name " <<endl;
cout<<"4. Exit. " <<endl;
cin >>choice;
menu(choice);
}while (choice != 4);
return 0;
}
Last edited on May 18, 2015 at 9:00am UTC
May 17, 2015 at 2:28pm UTC
Please wrap your code in code tags: You can find them under Format:
Also, whenever you allocate memory, always check for failure. I'm referring to:
"temp = new node"
.
You are already sorting your list as you input your data, so you shouldn't have this problem.
Are you saying that your list isn't sorted?
May 18, 2015 at 1:19am UTC
hi koothkeeper, my problem is when i add data one by one just like below sequence:
1.andrew
2.eric
3.madness
4.gerik
I want my data "gerik " in "madness " place when it show out. I am able to sort the data infront of "eric " but after "eric " i am not idea. I want my output just like:
1.andrew
2.eric
3.gerik
4.madness
thk.
Last edited on May 18, 2015 at 1:20am UTC
May 18, 2015 at 12:45pm UTC
You do realize that your program only sorts on last name, right?
May 19, 2015 at 7:25am UTC
Oh if you know the size of the array, let's say "n", then the middle position would be "n-1/2". The last position would be n-1. So if want to swap the middle and last position, you can do so by creating a temporary variable to hold the position and then interchange them-- probably in a for loop.
May 19, 2015 at 8:17am UTC
I guess the thread died.
Another pointless post...
Last edited on May 22, 2015 at 8:58am UTC
May 19, 2015 at 1:44pm UTC
@cshingk I am assuming you are showing a list of First names, not Last names.
If so, you must change your sort to sort on First name.