I'm working my way through the mini courses on LeetCode to understand data structures and algorithms better. I am currently on linked lists. After a few slides, I was tasked with creating a linked list. I had no idea what to do and was stuck on this problem for days. I would look at it for a bit, not know what to do, and try to work on something else, and not be able to focus on that something else because I didn't know what to do about the linked list. Meh! It was a long 3-4 days. I finally figured it out and I have to say I feel very pleased with myseld :D
Step 1: Define a node class and a linked list class.
Each node has a value and a pointer to the next node. There is just a single pointer here because I chose to create a singly linked list. You can also have a pointer in the reverse direction point at the previous node. That would be a doubly linked list. I also had to define my actual linked list which held the value for the head node.
Step 2: Create a get method to get the value at a particular "index".
I say "index" because, of course, a linked list doesn't actually have an index. What was meant was to get the index-th node in the linked list. In the problem, we are told to return -1 if a node at that "index" doesn't exist. Otherwise, the value of the node is returned. I traversed the list until I reached the index-th node and returned it.
|
get method in the class MyLinkedList |
Step 3 : Create a method to add a node at the head
Add a head. I think this is pretty self explanatory. An edge case I had to keep in mind - empty linked lists.
|
addAtHead method in the class MyLinkedList |
Step 4: Add a node to the tail of the list
The edge case on this was interesting. An empty list. Which meant, that really, I was just adding a head. So that's what I did. If the list was empty, I called the addAtHead method and let it do the work of adding the node.
|
addAtTail method in the class MyLinkedList |
Step 5: Add a node at a particular index
This took up most of my time. And a large part of it was due to me misreading the requirements. I misinterpreted it and could not understand why they wanted me to do something so ridiculous and at odds with itself. I finally realised that the only ridiculous one was me. I really did want to kick myself. Once I figured out what they were asking me to do, it was fairly smooth sailing.
|
addAtIndex method in the class MyLinkedList |
Step 6: Delete a node at a particular "index"
Again I had to traverse the list till I reached the node to be excised. This time though, I had to stop just before the index-th node so that I can point the node before the excision to the node after the excision.
|
deleteAtIndex method in the class MyLinkedList |
All in all, I'm pretty pleased that I figured it out. Though I can't say I like my code. I'm going to spend some time to clean it up and improve it if I can.
Comments
Post a Comment