LinkedList
This commit is contained in:
150
Semester 3/Assignments/LinkedList/src/linkedlist/MyList.java
Normal file
150
Semester 3/Assignments/LinkedList/src/linkedlist/MyList.java
Normal file
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package linkedlist;
|
||||
|
||||
import java.util.LinkedList;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author caleb
|
||||
*/
|
||||
public class MyList<E> {
|
||||
|
||||
private Node<E> head;
|
||||
|
||||
class Node<E> {
|
||||
|
||||
E e; // Data than can be anything
|
||||
Node<E> link; // Address of another node
|
||||
|
||||
}
|
||||
|
||||
public boolean add(E e)
|
||||
{
|
||||
Node<E> newNode = new Node<E>();
|
||||
newNode.e = e;
|
||||
|
||||
if (head == null) {
|
||||
head = newNode;
|
||||
} else {
|
||||
Node<E> p = head;
|
||||
Node<E> pTrail = head;
|
||||
while (p != null) {
|
||||
pTrail = p;
|
||||
p = p.link;
|
||||
}
|
||||
pTrail.link = newNode;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean add(E e, int index) {
|
||||
Node<E> newNode = new Node<E>();
|
||||
newNode.e = e;//copy data
|
||||
|
||||
//Check index location
|
||||
if (index < 0 || index > size()) {
|
||||
throw new IndexOutOfBoundsException();
|
||||
}
|
||||
|
||||
//Case 1: list is empty and the index is zero
|
||||
if (size() == 0 && index == 0) {
|
||||
head = newNode;
|
||||
} //Case 2: Add at front
|
||||
else if (index == 0) {
|
||||
//Connect newNode with the first node
|
||||
newNode.link = head;
|
||||
//Make head point to new node
|
||||
head = newNode;
|
||||
}
|
||||
//Case 3: Add in middle
|
||||
else if (index < size())
|
||||
{
|
||||
Node<E> p = head;
|
||||
for (int i = 0; i < index - 1; ++i)
|
||||
{
|
||||
p = p.link;//advance the p
|
||||
}
|
||||
//Point link of new node to next node
|
||||
newNode.link = p.link;
|
||||
//make previous node link point to new node
|
||||
p.link = newNode;
|
||||
}
|
||||
//Case 4: Add at end of list
|
||||
else {
|
||||
add(e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
String s = "";
|
||||
Node<E> p = head;
|
||||
while (p != null) {
|
||||
s += p.e.toString() + " ";
|
||||
p = p.link;
|
||||
}
|
||||
return "MyList{" + s + "}";
|
||||
}
|
||||
|
||||
public int size()
|
||||
{
|
||||
int count = 0;
|
||||
Node<E> p = head;
|
||||
while (p != null) {
|
||||
++count;
|
||||
p = p.link;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
public E removeAt(int index) {
|
||||
if (index < 0 || index >= size())
|
||||
throw new IndexOutOfBoundsException();
|
||||
if (size() == 0)
|
||||
throw new RuntimeException("Empty List");
|
||||
E removedE = null;
|
||||
if (index == 0) {
|
||||
// remove the front
|
||||
removedE = head.e;
|
||||
Node<E> p = head;
|
||||
head = head.link;
|
||||
p.link = null;
|
||||
}
|
||||
if (index > 0 && index < size()) { // remove middle
|
||||
Node<E> p = head;
|
||||
for (int i = 0; i < index - 1; ++i) {
|
||||
p = head.link;
|
||||
}
|
||||
removedE = p.link.e;
|
||||
p.link = p.link.link;
|
||||
} else { // Remove at end
|
||||
Node<E> p = head;
|
||||
for (int i = 0; i < index -1; ++i) {
|
||||
p = p.link;
|
||||
removedE = p.link.e;
|
||||
p.link = null;
|
||||
}
|
||||
}
|
||||
return removedE;
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
LinkedList<Integer> linkedList = new LinkedList<>();
|
||||
MyList<Integer> ml = new MyList<>();
|
||||
ml.add(10);
|
||||
ml.add(20);
|
||||
ml.add(30);
|
||||
ml.add(5, 0);
|
||||
ml.add(25, 3);
|
||||
ml.add(40, 5);
|
||||
System.out.println("removing " + ml.removeAt(2) + "...");
|
||||
System.out.println(ml);
|
||||
System.out.println(ml.size());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user