We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you two Citrix podcasts. Learn about 2020 trends and get answers to your biggest Citrix questions!Listen Now

x

puzzling linked lists

latha
latha asked
on
Medium Priority
255 Views
Last Modified: 2010-04-15
here is a problem given to me by one of my friends.i have racked my brains but am unable to solve it.
  Given a pointer to the head of a singly linked list, reverse the order of the list and return a pointer to the new head?
 please provide me the solution ASAP i am very inquisitive
Comment
Watch Question

Commented:
Here is a little program that does the thing
It use C++ syntax but should work on a C compiler without big change.

#include <stdio.h>
 
struct list {
  int one;
  list *next;
};
 
void print(list *l)
{
list *ll=l;
while (ll!=NULL)
{
  printf("%i ",ll->one);
  ll=ll->next;
}
printf("\n");
}

main()
{
list *l=NULL;
list *ll, *lll;;
int x;
scanf("%i ",&x);
while (x!=0)
{
  ll=l;
  l=new list;
  l->one=x;
  l->next=ll;
  scanf("%i",&x);
}
print(l);
 
//Here is the stuff
ll=NULL;
if (l!=NULL) lll=l->next;
while (l!=NULL)
{
  l->next=ll;
  ll=l;
  l=lll;
  if (lll!=NULL) lll=l->next;
}
l=ll;
//End of the stuff
 
print(l);
}

The whole thing stand on the use of 3 pointers :
the main pointer that follow the list
a pointer to the previous element
a pointer to the next element;

Given that, the problem is very simple.


Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts
To latha : My code could in fact be more clear with some comment.

To sanjiv : Very funny.
You have missed the case of a empty list.
And also something worst : out of your code :
while (pCurrentNode != NULL)
{
...//The content doesn't matter
}
return pCurrentNode ;
}
I THINK pCurrentNode COULD BE EQUAL to NULL WHEN RETURNED.


In my code, change :
l   to pCurrentNode
ll  to pPrevNode
lll to pNextNode
My code has been compiled and tested.

Commented:
Dear aleroy,

I completely agree with u about the problems u have pointed out.  I did not compile and test the program,  I don't have time to do that.  My intention was to give a quick start to latha and not to spoon-feed the solution.  I hope latha knows enough C programming to fix such problems.  


Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.