I’m having trouble reversing my doublely linked deque list (with only a back sentinel) in C, I’m approaching it by switching the pointers and here is the code I have so far:
/* Reverse the deque
param: q pointer to the deque
pre: q is not null and q is not empty
post: the deque is reversed
*/
/* reverseCirListDeque */
void reverseCirListDeque(struct cirListDeque *q)
{
struct DLink *back = q->backSentinel;
struct DLink *second = q->backSentinel->prev;
struct DLink *third = q->backSentinel->next;
while (second != q->backSentinel->next){
back->next = second;
third = back->prev;
back->next->prev = back;
back = second;
second = third;
}
}
But it doesn’t seem to work, I’ve been testing it with a deque that looks like this: 1, 2, 3
The output is: 3 and this process seems to mess up the actual value of the numbers. ie. 2 becomes 2.90085e-309… I think the pointer switching is messed up but I cannot find the problem. And even though it doesn’t mean my code is correct; it compiles fine.
If it’s a doubly linked list, you shouldn’t need to change any pointers at all. Just swap over the payloads:
If by back sentinel you mean the
lastpointer (as in no first pointer is available), then you need to step backwards throw the deque to find it. It’s hard to believe however that this would be the case since it would be a fairly inefficient deque (which is supposed to be a double ended queue).