c++ - Simpler approach to "reversing a doubly linked list" does not work for some reason -
i aware "reversing doubly linked list" has been asked , answered before, e.g.: reversing doubly linked list question little different.
all methods find online use "current node (curr)" iterator , swapping on follows:
node* reverse(node* head) { node* curr=head; while(curr) { swap(curr->next, curr->prev); head=curr; curr=curr->prev; } return head; } where node of type:
struct node { int data; node *next; node *prev } now question is, tried simplify code omitting curr iterator since looks totally unnecessary me. here new code:
node* reverse(node* head) { while(head) { swap(head->next, head->prev); if(head->prev) head=head->prev; } return head; } this works on paper when test in online compiler time limit exceeded error: http://www.mycodeschool.com/problems/reverse-a-doubly-linked-list
i believe can make swapping on head node , iterate prev node.
do see logical problems code?
node* reverse(node* head) { while(head) { swap(head->next, head->prev); if(head->prev) head=head->prev; else break; // !!! } return head; }
Comments
Post a Comment