1 / 21

Linked Lists

Linked Lists. many slides taken from Mike Scott, UT Austin. Recursive Data Structures. Linked Lists are dynamic data structures They grow and shrink one element at a time, normally without some of the inefficiencies of arrays Big O of Array Manipulations Access the kth element

edeline
Download Presentation

Linked Lists

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linked Lists many slides taken from Mike Scott, UT Austin

  2. Recursive Data Structures • Linked Lists are dynamic data structures • They grow and shrink one element at a time, normally without some of the inefficiencies of arrays • Big O of Array Manipulations • Access the kth element • Add or delete an element in the middle of the array while maintaining relative order • adding element at the end of array? space avail? no space avail? • add element at beginning of an array • If accesses are all at beginning or end of list, a linked structure offers improvements • Linked Lists could be used as the underlying storage container for higher level ADTs (stack, queue)

  3. Nodes and Lists • A different way of implementing a list • Each element of a Linked List is a separate Node object. • Each Node tracks a single piece of data plus a reference (pointer) to the next • Create a new Node every time we add something to the List • Remove nodes when item removed from list and allow garbage collector to reclaim that memory

  4. Elements of Linked Lists public class Node { private Object myData; private Node myNext; public Node() { myData = null; myNext = null; } public Node(Object data, Node next) { myData = data; myNext = next; } public Object getData() { return myData; } public Node getNext() { return myNext; } public void setData(Object data) { myData = data; } public void setNext(Node next) { myNext = next; } }

  5. One Implementation of a Linked List • The Nodes shown on the previous slide are singly linked • a node refers only to the next node in the structure • it is also possible to have doubly linked nodes. • The node has a reference to the next node in the structure and the previous node in the structure as well • How is the end of the list indicated • myNext = null for last node • a separate dummy node class / object

  6. A Simple List Interface public interface IList { void add(Object item); void add(Object item, int pos); Object set(Object item, int pos); void add(List other); Object get(int pos); Object remove(int pos); int size(); }

  7. A Linked List Implementation public class LinkedList implements Ilist { private Node myHead; private Node myTail; private int iMySize; public LinkedList() { myHead = null; myTail = null; iMySize = 0; } } LinkedList list = new LinkedList(); LinkedList myHead iMySize myTail null 0 null

  8. Add Element - List Empty (Before) Object item myHead myTail iMySize 0 null null

  9. Add Element - List Empty (After) Node myData myNext null myHead myTail iMySize 1 Object

  10. Add Element - List Not Empty (Before) Object item myHead myTail iMySize 1 Node myData myNext null Object

  11. Add Element - List Not Empty (After) Node myData myNext myHead myTail iMySize 2 Node myData myNext null Object Object

  12. Code for default add • public void add(Object item)

  13. Code for arbitrary add • public void add(Object item, int pos)

  14. Code for get • public Object get(int pos)

  15. Code for remove • public Object remove(int pos)

  16. Why Linked List • Are any operations with a Linked List faster than the version from ArrayList? • What about this: • public void addFront(Object item) • Big O? Array version Big O? • Fast performance for removeFront as well?

  17. Remove Back Method • public Object removeBack() • Big O?

  18. Other Possible Features of Linked Lists • Doubly Linked • Circular • Dummy Nodes for first and last node in list public class DLNode { private Object myData; private DLNode myNext; private DLNode myPrevious; }

  19. Default add for Doubly Linked List • public void add(Object item)

  20. Code for arbitrary add - Doubly Linked List • public void remove(Object item, int pos)

  21. Code for removeDoubly Linked List • public Object remove(int pos)

More Related