Amazon Interview Question
Software Engineer / Developersnode *reverseList(node *start, node *prev)
{
if (start == NULL)
return prev;
node *temp = start->next;
start->next = prev;
return reverseList(temp,start);
}
/* Call as reverseList(start,NULL); */
#include <stdio.h>
#include <malloc.h>
struct node {
node *next;
int data;
}*head;
node* reverseList(node *);
void printList(node *);
node* reverseListSimple(node *);
int main() {
node *temp, *prev=NULL;
//node *head = NULL;
for(int i=0;i<10;i++) {
// create temp node...
temp = (node *)malloc(sizeof(node));
temp->data = i;
temp->next = NULL;
if(head == NULL){
head = temp;
prev = temp;
}
prev->next = temp;
prev = temp;
}
//head = reverseList(head);
head = reverseListSimple(head);
printList(head);
}
node* reverseList(node *head) {
node *revHead = NULL;
if(head->next == NULL) return head;
revHead = reverseList(head->next);
head->next->next = head;
head->next = NULL;
return revHead;
}
node* reverseListSimple(node *head) {
node *cur=head, *next, *prev=NULL;
while(cur!=NULL){
next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;
}
void printList(node *head) {
while(head!=NULL) {
printf("\n %d ",head->data);
head = head->next;
}
}
- Thiyaneshwaran S November 10, 2009