is a way to save data which is efficient and what count as efficient differs from each case.
each DS has some basic methods that we expect it to have. for example if we take a list as an example:
addFirst(), addLast(), insertAt(), remove(),...
it is vital that we implement these methods such they are efficient in both memory and speed at the same time.
in most data structures decreasing time is equal to more allocation of more memory so we need to find the sweet spot in order to make a good data structure.
if we want to add to an array we need to change and shift the whole array so we came up with a better solution called link list where each node has a pointer to the node after it(also before it).
function reverseLinkedList(head):
// initialize variables
prev = null
curr = head
// loop through the linked list
while curr is not null:
// save the next node
nextNode = curr.next
// reverse the current node's pointer
curr.next = prev
// move pointers to the next nodes
prev = curr
curr = nextNode
// update the head of the linked list
head = prev
// return the reversed linked list
return head
see this link to get a better understanding of the problem.