Linked List UMPIRE Cheat Sheet - codepath/compsci_guides GitHub Wiki

Definition

  • A linked list is a sequence of data structures that are all connected together. Each link contains a connection to another link.
  • A linked list can only be accessed from the head

U-nderstand

What are some common questions we should ask our interviewer?

  • Is it a singly linked list or a doubly linked list?
  • If the example given is sorted, is the list always sorted?
  • Can I create a new list?
  • What should the method return?
    • A pointer to a head? A brand new list? Nothing?
  • What kind of data does the linked list hold?
    • Might affect how you check for equality between strings, integers, etc
  • Does the linked list have a maximum (or minimum) number of nodes?
  • Could there be cycles in the linked list?

M-atch

Are there any special techniques that we can use to help make this easier?

  • Multiple passes
    • To find the length, or save other information about the contents
  • Two pointers
    • ‘Race car’ strategy with one regular pointer, and one fast pointer
  • Temp node
    • Helpful for preventing errors when returning ‘head’ if merging lists, deleting from lists

P-lan/Pseudocode

  • Can you create any magic helper methods that would simplify the solution? (ie getLength(), reverse())
  • Talk through different approaches you can take, and their tradeoffs
  • Be able to verbally describe your approach and explain how an example input would produce the desired output

Tips:

  • Draw out node references
    • Helps to keep track of pointer and make sure you still have the pointer references you need
  • Handle edge cases
    • Are there cases when you are having to return a null head?
    • Are there cases when you’re not handling null pointers?

E-valuate

Questions to consider before being “done”

  • Will my code handle a totally empty linked list?
  • If there is a really high number of nodes, am I loading them all into memory?
  • Will even vs. odd number of nodes affect my algorithm?
    • If there is an even number, where is the middle?

Time Complexity

Best Case Worst Case
Accessing/Searching O(1) O(N)
Inserting O(1) O(N)
Deleting (1) O(N)

Note: Best cases occur when the node is at the head of the list, and worst cases occur when the node is at the end of the list