• C

puzzling linked lists

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
lathaAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

aleroyCommented:
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.


0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
sanjiv040897Commented:
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.

0
aleroyCommented:
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.  


0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C

From novice to tech pro — start learning today.