We have dealt exclusively with what are called singly-linked lists. They are called singly-linked because there is only one link that connects each node to another node in the list. We have called this link next because it points to the next item in the list.
In this exercise, you will write an implementation of doubly-linked list. A doubly-linked list maintains two links to other nodes in the list: a link called next which points to the next node in the list (and functions identically to the next pointer we have seen so far), and a link called prev which points to the previous node in the list. The prev allows you to walk back and forth through the list. For example, to find the second to last item in a doubly-linked list, you can start at the tail and follow one prev to get to the second to last node.
Here is what a doubly-linked list might look like in memory ( just the head and tail fields of the linkedList object are shown):
Node obj Node obj Node obj Node obj -------- -------- -------- -------- | data-|--> 6 | data-|--> 12 | data-|--> 3 | data-|--> 8 head ---------->| next-|-------->| next-|-------->| next-|-------->| next-|----| |--- |-prev |<--------|-prev |<--------|-prev |<--------|-prev | -------- -------- -------- -------- ^ | tail ------------------------------------------------------------------
You will need to do the following:
You should have a main function, that:
Please enter 10 values! 1: 21 2: 45 3: 79 4: 99 5: 3 6: -70 7: 51 8: 632 9: 787 10: 89 Here is your list: head--><--21--><--45--><--79--><--99--><--3--><---70--><--51--><--632--><--787--><--89-->tail search for: 51 <--(51)--> remove: 632 head--><--21--><--45--><--79--><--99--><--3--><---70--><--51--><--787--><--89-->tail