Write a function named braid
that accepts as a parameter a reference to a pointer to a ListNode
representing the front of a linked list.
Your function should interleave the reverse of the list into the original, with an element from the reversed list appearing after each element of the original list.
For example, if a variable named front
points to the front of a chain containing {10, 20, 30, 40}
, then after a call of braid(front);
, it should store {10, 40, 20, 30, 30, 20, 40, 10}
.
Constraints:
Do not modify the data
field of existing nodes; change the list by changing pointers only.
You can create new ListNode
objects to represent the reversed list nodes, but you should not throw out the existing ListNode
s of the original list; you should reuse them and interleave them with the new nodes you create.
Do not use any auxiliary data structures to solve this problem (no array, vector, stack, queue, string, etc).
Assume that you are using the ListNode
structure as defined below:
struct ListNode {
int data; // value stored in each node
ListNode* next; // pointer to next node in list (nullptr if none)
};