0

I'm getting a segmentation fault when I try to search a linkedlist using the following description:

//! Searches for the first occurrence of value v that appears in the list 
        //!   after node n
        //!   
        //!  @param v The value being searched for
        //!  @param n The node in the list after which the search should begin.
        //!      If n is NULL, the list should be searched from the beginning.
        //!
        //!  @return a pointer to the node containing v, or NULL if v is not found
        LLNode * Find(const std::string & v, LLNode * n) const;

I have tried setting a current node to head so I can start from the beginning and search the whole linkedlist when I encounter a null as the value of n.

As so

LLNode * LinkedList::Find(const std::string & v, LLNode * n) const 
{
	LLNode * current = n;
	if(current==NULL) 
	{
		current = this->GetFirst();
		{
			while(current != NULL)
			{
				if(current->value == v) {
					cout << "Actual: " << current->value << "\tExpected: " << v << endl;
					return current;
				}
				else 
					current = current->next;
			}
		}

	}
	else {
		while(current != NULL)
		{
			if(current->value == v) {
				cout << "Actual: " << current->value << "\tExpected: " << v << endl;
				return current;
			}
			else 
				current = current->next;
		}
	}
	return NULL;
}

If I don't use the if else statement like so:

if(current==NULL) 
	{
        ......
        }
        else
        {
        ....
        }

and have just one while loop no segmentation fault occurs but it return null when it is not suppose to. I'm really stumped. I can't see how I could include the requirement of if the current node is null then just start from the beginning.

Your help is greatly appreciated.

2
Contributors
2
Replies
3
Views
7 Years
Discussion Span
Last Post by prvnkmr449
0
LLNode * LinkedList::Find(const std::string & v, LLNode * n) const 
{

	LLNode * current = n;

	if(current==NULL) {
		current = new LLNode(*head);
		//cout << "HEAD value: " << head->value << endl;
		//cout << "CURRENT value: " << current->value << endl;
	}
		
	while(current != NULL)
		{
			//cout << "CURRENT value: " << current->value << endl;
			//cout << "v value: " << v << endl;						
			if(current->value == v) {
				//cout << "WE ARE FAMILY! ALL MY SISTERS BROTHERS AND ME" << endl;
				return current;
			}
			current = current->next;
		}
	if(current->value != v)
		return NULL;
}

I'm getting a segmentation fault when I try to search a linkedlist using the following description:

//! Searches for the first occurrence of value v that appears in the list 
        //!   after node n
        //!   
        //!  @param v The value being searched for
        //!  @param n The node in the list after which the search should begin.
        //!      If n is NULL, the list should be searched from the beginning.
        //!
        //!  @return a pointer to the node containing v, or NULL if v is not found
        LLNode * Find(const std::string & v, LLNode * n) const;

I have tried setting a current node to head so I can start from the beginning and search the whole linkedlist when I encounter a null as the value of n.

As so

LLNode * LinkedList::Find(const std::string & v, LLNode * n) const 
{
	LLNode * current = n;
	if(current==NULL) 
	{
		current = this->GetFirst();
		{
			while(current != NULL)
			{
				if(current->value == v) {
					cout << "Actual: " << current->value << "\tExpected: " << v << endl;
					return current;
				}
				else 
					current = current->next;
			}
		}

	}
	else {
		while(current != NULL)
		{
			if(current->value == v) {
				cout << "Actual: " << current->value << "\tExpected: " << v << endl;
				return current;
			}
			else 
				current = current->next;
		}
	}
	return NULL;
}

If I don't use the if else statement like so:

if(current==NULL) 
	{
        ......
        }
        else
        {
        ....
        }

and have just one while loop no segmentation fault occurs but it return null when it is not suppose to. I'm really stumped. I can't see how I could include the requirement of if the current node is null then just start from the beginning.

Your help is greatly appreciated.

0

Please try to paste your full coding related to this problem so that some can able point out your because I did't get fault in this code may I miss that point although paste your enough code to compile mainly your class.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.