Report

LECTURE 3:LIKED LIST linear list Concept: Linear list : Each element has a unique successor. Two approaches to implement a linear list Array: Inefficient when element needs to be inserted or deleted. Linked list: Efficient when element needs to be inserted or deleted. Categories of linear list Linked list One disadvantage of using arrays to store data is that arrays are static structures and therefore cannot be easily extended or reduced to fit the data set . Linked list con.. Arrays are also expensive to maintain new insertions and deletions. In this chapter we consider another data structure called Linked Lists that addresses some of the limitations of arrays. Linked list con.. A linked list, in its simplest form, is a collection of nodes that together form a linear ordering. Each node is an object that stores a reference to an element and a reference, called next, point to another node. Linked list con.. The order of the nodes is determined by the address, called the link, stored in each node Every node (except the last node) contains the address of the next node Components of a node : Data: stores the relevant information Link: stores the address of the next node Linked list –Node Structure Structure of a node: Data link Linked list –Node Structure con.. A node with one data field number A node with three data fields name id grdPts A structure in a node name Home_Address phone Linked list –Head Structure Head or first : Holds the address of the first node in the list The info part of the node can be either a value of a primitive type or a reference to an object Linked list –Head Structure con.. Linked list classes Class Node Represents nodes on a list It has two instance variables - info (of type int, but it can be any other type) - link (of type Node) public class Node { public int info; public Node link; } Linked List: Some Properties Linked list with four nodes Linked List: Some Properties Now consider the statement current = head; Linked list after current = head; executes Linked List: Some Properties Now consider the statement current = current.link; List after the statement current = current.link; Linked List: Some Properties Singly Linked list Operations Insertion Deletion Traversal Traversing a Linked List Basic operations of a linked list that require the link to be traversed Search the list for an item Insert an item in the list Delete an item from the list You cannot use head to traverse the list You would lose the nodes of the list Use another reference variable of the same type as head: current Traversing a Linked List con.. The following code traverses the list current = head; while (current != null) { //Process current current = current.link; Insertion in a Singly Linked List Three steps : Allocate memory for the new node and insert data. Point the new node to its successor. Point the new node’s predecessor to the new node Three cases: Insert into an empty list Insert at beginning Insert at middle Insert at end. Insertion at the beginning: The list is empty if the head points to null. When using a singly linked list, we can easily insert an element at the head of the list. The main idea is that we create a new node, set its next link to refer to the same object as head, and then set head to point to the new node. Insertion at the beginning con.. Insertion of an element at the head of a singly linked list (a) before the insertion. (b) creation of a new node. (c) after the insertion. Algorithm of Insertion at the beginning Inserting a new node v at the beginning of a singly linked list. Note that this method works even if the list is empty. we set the next pointer for the new node v before we make variable head point to v. Insertion in the middle: Consider the following linked list You want to create a new node with info 50 and insert it after p Insertion in the middle con.. The following statements create and store 50 in the info field of a new node Node newNode = new Node(); //create newNode newNode.info = 50; //store 50 in the new node Create newNode and store 50 in it Insertion in the middle con.. The following statements insert the node in the linked list at the required place newNode.link = p.link; p.link = newNode; The sequence of statements to insert the node is very important. Insertion in the middle con.. newNode.link = p.link; executes p.link = newNode; executes Insertion at the Tail (end) We can also easily insert an element at the tail of the list, provided we keep a reference to the tail node In this case, we create a new node, assign its next reference to point to the null object, set the next reference of the tail to point to this new object, and then assign the tail reference itself to this new node. Insertion at the Tail (end) con.. (a) before the insertion (b) creation of a new node (c) after the insertion. Note that: we set the next link for the tail in (b) before we assign the tail variable to point to the new node in (c). Algorithm of Insertion at the end Inserting a new node at the end of a singly linked list. This method works also if the list is empty. Note that we set the next pointer for the old tail node before we make variable tail point to the new node. Deletion in a Singly Linked List The reverse operation of inserting a new element at the head of a linked list remove an element at the head. This operation is illustrated in removal of an element at the head of a singly linked list (a) before the removal (b) "linking out" the old new node (c) after the removal. Algorithm of Removing the node from the beginning of a singly linked list Unfortunately, we cannot easily delete the tail node of a singly linked list. Even if we have a tail reference directly to the last node of the list, we must be able to access the node before the last node in order to remove the last node. But we can not reach the node before the tail by following next links from the tail. The only way to access this node is to start from the head of the list and search all the way through the list. But such a sequence of link hopping operations could take a long time. Doubly Linked Lists As we saw in the previous section, , removing an element at the tail of a singly linked list is not easy. Indeed, it is time consuming to remove any node other than the head since we do not have a quick way of accessing the node in front of the one we want to remove we do not have quick access to such a predecessor node. For such applications, it would be nice to have a way of going both directions in a linked list. Doubly Linked Lists (con….) There is a type of linked list that allows us to go in both directions - forward and reverse in a linked list It is the doubly linked list. Such lists allow for a great variety of quick update operations, including insertion and removal at both ends, and in the middle. A node in a doubly linked list stores two references—a next link which points to the next node in the list, and a prev link, which points to the previous node in the list. A doubly linked list with sentinels, header and trailer. • An empty list would have these sentinels pointing to each other. • Adding an element at the front we can easily perform an insertion of a new element at the beginning of a doubly linked list Algorithm of Inserting a new node v at the beginning of a doubly linked list. Variable size keeps track of the current number of elements in the list. Note that this method works also on an empty list. Insertion in the Middle of a Doubly Linked List They also are convenient for maintaining a list of elements while allowing for insertion and removal in the middle of the list. Given a node v of a doubly linked list (which could be possibly the header but not the trailer) we can easily insert a new node z immediately after v. Specifically, let w the be node following v. We execute the following steps: Algorithm of Inserting a new node z after a given node v in a doubly linked list. 1. 2. 3. 4. make z's prev link refer to v make z's next link refer to w make w's prev link refer to z make v's next link refer to z Deletion from double linked list Removal in the Middle of a Doubly Linked List (a) before the removal (b) linking out the old node (c) after the removal (and garbage collection). Removing a node v in a doubly linked list. This method works even if v is the first, last, or only nonsentinel node. Circular linked List Same as single linked list Last node link is connected to the first. When insert/ delete at the last node Make sure to update the link field of the last node to the first node. Circular linked list with more than one node It is convenient to make first point to the last node Insert a node at the front of CLL Insert a node at the end of CLL