Fall 2005 Data Structure Linked List – Single Linked List
Fall 2005W.F. Agenda Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End Delete node Delete First Node General Delete Node
Fall 2005W.F. Agenda Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End Delete node Delete First Node General Delete Node
Fall 2005W.F. Insert Node Three steps to the insertion Allocate memory for the new node and insert data Point the new node to its successor. Point the new node s predecessor to it.
Fall 2005W.F. Agenda Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End Delete node Delete First Node General Delete Node
Fall 2005W.F. Insert into Empty List Creat a new empty list : Define the node s structure Creat a new empty list list_pointer ptr = NULL; typedef struct list_node *list_pointer; typedef struct list_node{ char data[4]; list_pointer link; } list_node ; ptr NULL
Fall 2005W.F. Insert into Empty List Insert a new node into empty list temp = (list_pointer) malloc (sizeof(list_node)); ptr = temp; ptr Address of first node NULL ptr->dataptr->link NULL temp
Fall 2005W.F. Agenda Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End Delete node Delete First Node General Delete Node
Fall 2005W.F. Insert at Beginning (1/2) 20 ptr 30 NULL 10 temp 20 ptr 30 NULL 10 Allocate memory for the new node and insert data Point the new node to its successor. Point the new node s predecessor to it. Before insert After insert
Fall 2005W.F. Insert at Beginning (2/2) #include list_pointer temp; temp = (list_pointer) malloc (sizeof(list_node)); temp->data = 10; if(*ptr){ temp->link = *ptr; *ptr = temp; } else{ temp->link = NULL; *ptr = temp } temp 30 NULL 20 ptr 10 #include //page 144
Fall 2005W.F. Agenda Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End Delete node Delete First Node General Delete Node
Fall 2005W.F. Insert in Middle (1/2) NULL ptr 10 temp Insert 20 between 10 and 30
Fall 2005W.F. Insert in Middle (2/2) ptr 10 temp NULL node void insert (list_pointer *ptr, list_pointer node) { if(*ptr){ temp->link = node->link; node->link = temp; } else{ temp->link = NULL; *ptr = temp } }
Fall 2005W.F. Agenda Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End Delete node Delete First Node General Delete Node
Fall 2005W.F. Insert at End 20 ptr temp NULL node void insert ( …, … ) { … if(*ptr){ temp->link = NULL; node->link = temp; } … }
Fall 2005W.F. Agenda Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End Delete node Delete First Node General Delete Node
Fall 2005W.F. Delete node (1/2) Delete node : locate the node first. Assume we have three points ptr : point to the start of the list node : points to the node that we wish to delete trail : points to the predecessor NULL ptr 10 nodetrail
Fall 2005W.F. Delete node (2/2) There are only two case: Delete the first node Delete any other node
Fall 2005W.F. Agenda Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End Delete node Delete First Node General Delete Node
Fall 2005W.F. Delete First Node (1/2) NULL ptr 10 trail node NULL Free (node);
Fall 2005W.F. Delete First Node (2/2) ptr 10 trail NULL NULL node void delete(list_pointer *ptr, list_pointer trail, list_pointer node) { if (trail) trail->link = node->link; else *ptr = (*ptr)->link; free(node); }
Fall 2005W.F. Agenda Insert node Insert into Empty List Insert at Beginning Insert in Middle Insert at End Delete node Delete First Node General Delete Node
Fall 2005W.F. General Delete Node (1/4) Case I : delete node between first node and last node NULL ptr 10 trailnode
Fall 2005W.F. General Delete Node (2/3) ptr 10 trail NULL node void delete(list_pointer *ptr, list_pointer trail, list_pointer node) { if (trail) trail->link = node->link; else *ptr = (*ptr)->link; free(node); }
Fall 2005W.F. General Delete Node (3/4) Case II : delete last node NULL ptr 10 nodetrail NULL
Fall 2005W.F. General Delete Node (4/4) ptr 10 trail NULL node void delete(list_pointer *ptr, list_pointer trail, list_pointer node) { if (trail) trail->link = NULL; else *ptr = (*ptr)->link; free(node); } NULL
Fall 2005W.F. Q & A