Call by function structures

I am trying to create a linked list dequeed. I have created my add a word which adds a word. Because i change the head and the tail of list i was trying to use call by reference so i could change both the head and the tail of the list. I am not sure what i am doing wrong because it isn't changing the address outside of the function. Head and tail are NULL when they are sent. Head and Tail get addresses while in the functions and then after leaving the function HEAD and TAIL become NULL again. I dont understand why this is happening? Thanks for any help. I could add all my code but i was hoping someone would be able to help with just this? Thanks

Call to the function

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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
    #include <iostream>
#include <cstdlib>
#include <fstream>
#include <stdio.h>
#include <cstring>
#include <strings.h>
#include <cctype>

struct node
{
char word [10];
node *next;
node *prev;
};


using namespace std;


int display ();
void switcheroo (int, struct node*, struct node*);
void  add_Word (char [], struct node**, struct node**);
void delete_Word (char [], struct node **, struct node **);
void display_Queue (struct node*);
void display_Stack (struct node*);
void search_List (char[], struct node*);
struct node* makeNode (void);

int main ( )
{

system ("clear");
int pick;
struct node *head;
struct node *tail;
head = NULL;

cout << endl << head << " first call"<< endl;

while (pick != 6)
{
cout << endl << head << " 888888"  << endl;
pick = display ();
switcheroo (pick, head, tail);
}

return 0;
}

/*******************************************************************/

int display ()
{

int user_choice;

  cout <<"What would you like to do?\n\n";  
  cout <<"Press 1   Add a word\n";
  cout <<"Press 2   Delete a word\n";
  cout <<"Press 3   Display the data in Queue order\n";
  cout <<"Press 4   Display the data in stack order\n"; 
  cout <<"Press 5   Search the list for a word\n";
  cout <<"Press 6   Quit\n";
  cin >> user_choice;

  return user_choice;
}
/********************************************************************/
void switcheroo (int pick, struct node* head, struct node*tail)
{
  char word [10];
  switch (pick)
        {
    case 1:
        cout << "Please enter a word:\n";
        cin  >> word;
        add_Word(word, &head, &tail);
        break;
    case 2:
        display_Queue(head);
        cout << "\n\nEnter a word to delete\n";
        cin >> word;
        delete_Word(word, &head, &tail);
        break;
    case 3:
        display_Queue(head);
        break;
    case 4:
        display_Stack(tail);
        break;
    case 5: 
        display_Queue(head);
        cout << "\n\nWhat word would you like to search for?\n";
        cin >> word;
        search_List(word, tail);
        break;
    case 6:
        return;
        }
}

/*******************************************************************/
void  add_Word ( char word[], struct node **head, struct node **tail)
{
  struct node *var, *temp;
  var = makeNode();
  strcpy (var->word, word);
  
  cout << endl << *head << endl;
   cout << endl << *tail << endl;

  if (*head == NULL)
  {
  *head = var;
  cout << *head << endl;
  (*head)->prev = NULL;
  (*head)->next = NULL;
  tail = head;
  

  cout << endl << "00000" << *head << endl;
  }
  else 
  {
  cout << "--------------" << endl;
  temp = var;
  temp->prev = NULL;
  temp->next = *head;
  (*head)->prev = temp;
  *head = temp;
  }
   
}
/*******************************************************************/


struct node* makeNode (void)
{
  struct node* newptr;

  newptr = new struct node;
  if (newptr)
    newptr->next = NULL;

  return newptr;
}

/*******************************************************************/

void display_Queue(struct node * x)
{
  int n = 01;
  while (x != NULL)
  {
  cout << "---" << x->word << "---" << n << endl;
  n++;
  x = x->prev;
  }

  return;
} 
/*******************************************************************/
void display_Stack (struct node *x)
{
  int n=1;
  while (x != NULL)
  {
  cout << "---" << x->word << "---" << n << endl;
  n++;
  x = x->next;
  }
  
  return;
}
/*******************************************************************/
void delete_Word(char word [], struct node **head, struct node **tail) 
{

  struct node *palabra, *x;
  int n = 0; 
  x = *head; 
  char copy [10];
  while (x != NULL)
  {
  strcpy (copy,x->word); 
   cout << "!!!!!!!!!!" << x->word << endl;  
  if (strcasecmp (x->word, word)==0)
    {
        cout << "**********"<< endl;
    palabra = x;
    n++;
    }
  x = x->next;
  }

  if (n==0)
  cout << "NO word to delete!!! try again";

 
  if (n==1)
{  
  if ((palabra->next == NULL) && (palabra->prev == NULL))
    { 
    delete (palabra);
    *head = NULL;
    *tail = NULL;
    }
  else if (palabra->next == NULL)
    {
    *tail = palabra->prev;
    (*tail)->next = NULL;
    delete (palabra);
    }
  else if(palabra->prev == NULL)      
    {
    *head = palabra->next;
    (*head)->prev = NULL;
    delete (palabra);
    }
  else if((palabra->next != NULL)&&(palabra->prev!= NULL))
    {
    palabra->next->prev = palabra->prev;
    palabra->prev->next = palabra->next;
    delete (palabra);
    }
}
}
/*******************************************************************/
void search_List (char word[], struct node *x)
{
  int n =1;
  cout << endl << word << endl;
   

  while (x != NULL)
  {
    if (strcasecmp (x->word, word)==0)
        {
        cout << "Your word has been found\n";
        cout << word << " is number:  " << n << " in the list\n\n";
        }
    n++;
    x = x->prev;
  }
}

Last edited on
What is this?????????

What does that mean? what is this?
it is a doubly linked list written in c++ that doesn't work because i switched from global variables to local varibles and am trying to pass by reference but my pass by references are not changing anyhting out side of the function.
I need to understand what i am doing wrong. specifically i want to understand why my pass by references of HEAD and TAIL in the add_Word function and delete_Word function are not passing by reference. Why are they not changing the variables outside of the function.
Topic archived. No new replies allowed.