More on Linked List Yumei Huo Department of Computer Science Sequences 2019/7/24 More on Linked List Yumei Huo Department of Computer Science College of Staten Island, CUNY Spring 2009 2019/7/24 Linked list
Outline Variants of Singly linked list Doubly linked list 2019/7/24
Outline Variants of Singly linked list Doubly linked list 2019/7/24
Variants of Singly linked list Singly linked circular list Singly linked list with head node Singly linked circular list with head node 2019/7/24 Linked list
Singly linked circular list Link the last node back to the first A B C D first E 2019/7/24 Linked list
Print all the elements in a singly linked circular list B C D first E Node * tmp=first; if (tmp != 0) { cout << tmp->data; while (tmp->next !=first) tmp=tmp->next; } 2019/7/24 Linked list
Singly linked list with head node Add an additional node, called head node, at the front first Head node Empty list A B C first Head node Singly linked list with head node 2019/7/24 Linked list
Singly linked circular list with head node first Head node Empty list A B C first Head node Circular list with head node 2019/7/24 Linked list
Outline Variants of Singly linked list Doubly linked list 2019/7/24
Doubly Linked List Nodes implement Position and store: data link to the previous node link to the next node prev next data node Tail Head A B C D 2019/7/24 Linked list
Operations Comparison Singly Linked List Doubly Linked List Determine the length O(n) Find the kth element O(k) Search for a given element Delete the kth element Insert a new element just after the kth Delete a node pointed by p O(1) Insert a new element before the node pointed by p 2019/7/24 Linked list
Delete a node pointed by p q Head Tail A B C D q Tail Head A B C D q Tail Head A B D Doubly Linked List p q Head A B C D q Head A B C D q Head A B D Singly Linked List 2019/7/24 Linked list
Delete a node pointed by p in a doubly linked list q Head Tail A B C D q Tail Head A B C D q Tail Head A B D Doubly Linked List p->prev->next=p->next; p->next->prev=p->prev; delete p; 2019/7/24 Linked list
Delete a node pointed by p in singly linked list q Head A B C D q Head A B C D q Head A B D Singly Linked List //search p’s previous node q, assume p exists and is not the 1st node //(what if p is the 1st node?): Node * q=head; while (q->next != p) q=q->next; //let q point to p’s next node q->next=p->next; delete p; 2019/7/24 Linked list
Insert a new element ‘X’ before the node pointed by p Head A B C Tail t p Head A B C Tail X q t q p Head A B X C Tail Doubly Linked List t p Head A B C p t Head A B C q X t q p Head A B X C Singly Linked List 2019/7/24 Linked list
Sequences 2019/7/24 Insert a new element ‘X’ before the node pointed by p in a doubly linked list t p Head A B C Tail t p Head A B C Tail X q t q p Head A B X C Tail Doubly Linked List //create a new node containing ‘X’: Node *q = new Node; q->data=‘X’; //insert q before p: q->prev=p->prev; q->next=p; p->prev->next=q; p->prev=q; 2019/7/24 Linked list
Insert a new element ‘X’ before the node pointed by p in a singly linked list Head A B C p t Head A B C q X t q p Head A B X C Singly Linked List //create a new node containing ‘X’: Node * q= new Node; Q->data = ‘X’; //search p’s previous node t, assume p exists and is not the 1st node //(what if p is the 1st node?): Node * t= head; while (q->next != p) q=q->next; //insert q between t and p q->next=p; t->next=q; 2019/7/24 Linked list
Thank you! 2019/7/24 Linked list