2.3. Linked List

As a data structure, linked list can be considered as a one dimension, simplified and flattened binary tree.

We will use this naming conversion in this chapter unless there is special declaration:

d - dummy node
c - current node, used to loop through the list
h - head of linked list
p - previous node
n - next node
nn - next next node
t - tmp node
  • Reverse a linked list

ListNode *p = NULL, *c = head, *n;
while (c) n = c->next, c->next = p, p = c, c = n;
// p is the new head now!

This kind of in-place chaining assignment is a pattern. It appears in many places like Rotating Image.

  • Find lower median of a linked list

ListNode* fast = head, *slow = head;
while (fast && fast->next && fast->next->next)
  fast = fast->next->next, slow = slow->next;
// slow is the lower median now!
  • Delete current node

p->next = c->next;
// p doesn't have to move

If there is no previous node p, we can copy next node to current node like:

// assuimg val and next are the only two member variables of the node
c->val=c->next->val, c->next=c->next->next;