B's Blog

Linked Lists

LinkedListRepresentation

Traversing a singly-linked list :

cur = ListNode1
while (cur!=NULL) :
	cur = cur.next

Screenshot 2024-09-10 at 6

Time Complexity : O(N)

Adding a new node to the linked list :

Screenshot 2024-09-10 at 6

LeetCode/NeetCode Practice Questions:

  1. Merge two sorted linked lists:

intuition / approach :

a. you create a dummy node to avoid the edge cases of empty list

b. the other edge case is when we have finished iterating through one list but we are still left with elements from the other list -

Screenshot 2024-09-11 at 10

in this case all we need to do is take the remaining elements from the list and add it to our output (lucky for me these lists were already sorted!)

so how do we go about creating a dummy node?

dummy = ListNode() # so that we dont have to worry about inserting into an empty list

note to future-self : have I figured out why dummy.next is returned?

solution :

dummy = ListNode() tail = dummy while list1 and list2: if list1.val < list2.val: tail.next = list1 list1 = list1.next # update the list1 pointer else: # list2.val <= list1.val tail.next = list2 list2 = list2.next #update the pointer tail = tail.next # but what if there is a portion of either list1 or list2 left which wasnt compared above if list1: tail.next = list1 if list2: tail.next = list2 return dummy.next # ??