Linked List’s Examples

Preview:

DESCRIPTION

Linked List’s Examples. Salim Malakouti. Linked List?. Value. Pointer. Pointer. 5. 2. 3. Node. Node Class. public class Node { /** * Data */ private T value; /** * Pointer to the next Node */ private Node next; public Node(T value, Node next) { - PowerPoint PPT Presentation

Citation preview

LINKED LIST’S EXAMPLESSalim Malakouti

Linked List?

52 3

Pointer

Node

Value Pointer

Node Class public class Node<T> { /** * Data */ private T value; /** * Pointer to the next Node */ private Node<T> next;

public Node(T value, Node<T> next) { this.setValue(value); this.setNext(next);

} … … }

Comprehension Questions

Question 1 If we just want to iterate over the list

and print all values, which one is faster why? Array Linked List?

Answer Array

Because all elements are beside each other. There is no need for scanning the file.

Algorithmic Questions

How to add a new value to the list?

Question 1

Question 1 /** * This function simply adds a new node to the list by

adding it to the * beginning. * * @param value */ public void add(T value) { Node<T> tmp = getHead(); setHead(new Node<>(value)); getHead().setNext(tmp); }

How to clear the Linked List?

Question 2

Clear /** * This function simply clears the list */ public void clear() { setHead(null); }

How to find the size?

Question 3

Size /** * Computes the size of the list. * * @return */ public int size() { Node<T> current = getHead(); int size = 0; while (current != null) { current = current.getNext(); size++; } return size; }

Size Recursive /** * Computes the size of the list but using a recursive function. * * @return */ public int sizeRecursive() { return sizeR(head); } /** * The inner part of the recursive size * @param head * @return */ private int sizeR(Node<T> head) { if (head == null) return 0; else return sizeR(head.getNext()) + 1; }

How to get the last value?

Question 4

Get Tail /** * This function returns the last element. * * @return */ public Node<T> getTail() { Node<T> current = getHead(); while (current.getNext() != null) { current = current.getNext(); } return current; }

Get Tail Recursive public Node<T> getTailRecursive() { return tailR(head); } /** * Inner function for finding tail recursively * @param node * @return */ private Node<T> tailR(Node<T> node) { if (node.getNext() == null) return node; return tailR(node.getNext()); }

How to append to lists?

Question 5

Append /** * Append the input list to the end of this list. * * @param l */ public void append(LinkedList<T> l) { Node<T> tail = getTail(); if (tail == null) { head = l.getHead(); } else { tail.setNext(l.getHead()); }

How to check if a specific value is in the list?

Question 6

Has Value /** * This function checks to see if there is a node with value equal to the * input. * * @param value */ public boolean hasValue(T value) { Node<T> current = getHead(); while (current != null) { if (current.getValue().equals(value)) { return true; } current = current.getNext(); } return false; }

How to find the ith element?

Question 7

Get ith /** * This function returns the ith item in the list. */ public T get(int index) { Node<T> current = getHead(); int i = 0; while (current != null) { if (i == index) return current.getValue(); current = current.getNext(); i++; } return null; }

How to remove a specific element?

Question 8

Remove /** * This functions removes nodes in the list equal to the input. Only one at * a time. * * @param value */ public void remove(T value) { Node<T> pre = null; Node<T> current = getHead(); while (current != null) { if (current.getValue().equals(value)) { if (pre != null) { pre.setNext(current.getNext()); } else { setHead(current.getNext()); } break; } pre = current; current = current.getNext(); } }

How to reverse the list?

Question 9

Reverse /** * This function simply reverses the list */ public void reverse() { Node<T> next = getHead(); Node<T> pre = null; Node<T> tmp = null; while (next != null) { tmp = next; next = next.getNext(); tmp.setNext(pre); pre = tmp; } setHead(tmp); }

How to insert in ith position?

Question 10

Insert in ith position public void insert(int index, T value) { Node<T> current = getHead(); Node<T> pre = null; int i = 0; while (current != null) { if (i == index) { if (pre != null) { pre.setNext(new Node(value, current)); } else { setHead(new Node(value, current)); } } pre = current; current = current.getNext(); i++; } }

Recommended