Aside: Assert: - How To Use Assert
Aside: Assert: - How To Use Assert
user of the application Use exceptions and exception handlers in production code to terminate gracefully with a sensible error message (if necessary)
Traversing a list
for (t = start; t != NULL; t = t->next) {! visit (t->item);! }
just deleting from list , assumes other references to node exist otherwise memory leak
Operations on lists
Delete function
! Delete after element x:"
! //delete node after x from list and free memory! void deleteNext (Link x); ! ! ! //remove node after x from list,return ptr to node ! ! Link removeNextFromList (Link x); !
! Remove all items in a list which are even
//Remove all nodes with zero from list, free mem.! void deleteZeros (Link ls); either return new list as result: or pass a pointer to the link
Example
Implement a function which given a linked list, reverses the order of items
link reverse (Link list) {! Link tmp;! Link curr = list;! Link rev = NULL; ! while (curr != NULL) {! tmp = curr->next; ! curr->next = rev; ! rev = curr; ! curr = tmp;! } ! return rev;! }
Problem: deletion
! We know how to delete the node after a given node x:!
! !
x->next = x->next->next;
node
typedef struct dnode *Dlink;! struct dnode {! Item item;! Dlink next;! Dlink prev;! } Dnode;