Chapter 2. Linked Lists

  1. Write code to remove duplicates from an unsorted linked list.
    FOLLOW UP
    How would you solve this problem if a temporary buffer is not allowed?
  2. Implement an algorithm to find the nth to last element of a singly linked list.
  3. Implement an algorithm to delete a node in the middle of a single linked list, given only access to that node.
    EXAMPLE
    Input: the node c from the linked list a->b->c->d->e
    Result: nothing is returned, but the new linked list looks like a->b->d->e

  4. Write code to partition a linked list around a value x, such that all nodes less than x come before all nodes greater than or equal to x.
  5. You have two numbers represented by a linked list, where each node contains a single digit. The digits are stored in reverse order, such that the 1’s digit is at the head of the list. Write a function that adds the two numbers and returns the sum as a linked list.
    EXAMPLE
    Input: (7->1->6) + (5->9->2). That is, 617 + 295.
    Output: 2->1->9. That is, 912.
    FOLLOW UP
    Suppose the digits are stored in forward order. Repeat the above problem.
    EXAMPLE
    Input: (6->1->7) + (2->9->5). That is, 617 + 295.
    Output: 9->1->2. That is, 912.
  6. Give a circular linked list, implement an algorithm which returns the node at the beginning of the loop.
    DEFINITION
    Circular linked list: A (corrupt) linked list in which a node’s next pointer points to an earlier node, so as to make a loop in the linked list.
    EXAMPLE
    Input: A->B->C->D->E->C [the same C as earlier]
    Output: C
  7. Implement a function to check if a linked list is a palindrome.

Leave a Reply