public class LinkedList { private Node front; //private int count; //private Nod
ID: 3860558 • Letter: P
Question
public class LinkedList {
private Node front;
//private int count;
//private Node end;
public LinkedList(Node f) {
front = f;
}
public LinkedList() {
front = null;
}
public void addToFront(String d) {
Node n = new Node(d, front);
front = n;
}
public boolean isEmpty() {
if(front == null)
return true;
else
return false;
}
public void clear() {
front = null;
}
public String getFrontData() {
return front.getData();
}
public Node getFrontNode() {
return front;
}
public String toString() {
String ts = "[";
Node cur = front;
while(cur != null) {
ts += cur;
cur = cur.getNext();
}
return ts + "]";
}
public int size() {
int count = 0;
Node cur = front;
while(cur != null) {
count++;
cur = cur.getNext();
}
return count;
}
public void removeFront() {
if(!isEmpty())
front = front.getNext();
// else
// System.out.println(No front to remove!);
}
public void addToEnd(String d) {
Node n = new Node(d, null);
if(isEmpty())
front = n;
else {
Node cur = front;
while(cur.getNext() != null)
cur = cur.getNext();
cur.setNext(n);
}
}
public void removeLast() {
if(!isEmpty()) {
if(front.getNext() == null)
front = null;
else {
Node cur = front;
while(cur.getNext() != null)
cur = cur.getNext();
cur.setNext(null);
}
//} else { System.out.println(No end to remove!);
}
}
public int contains(String d) {
Node cur = front;
boolean found = false;
int index = -1;
while(cur != null && !found) {
index++;
if(cur.getData().equals(d))
found = true;
cur = cur.getNext();
}
if(!found)
index = -1;
return index;
}
public void add(int index, String d) {
if(index >= 0 && index <= size() ) {
if(index == 0)
addToFront(d);
else {
Node cur = front;
for(int i=0; i<index-1; i++)
cur = cur.getNext();
Node n = new Node(d, cur.getNext());
cur.setNext(n);
}
}
//else { System.out.println(index out of bounds!); }
}
public void remove(int index) {
if(index >= 0 && index <= size() ) {
if(index == 0)
removeFront();
else if(index == size()-1)
removeLast();
else {
Node cur = front;
for(int i=0; i<index-1; i++)
cur = cur.getNext();
cur.setNext(cur.getNext().getNext());
}
}
//else { System.out.println(index out of bounds!); }
}
public Node getNode(int index) {
Node cur = null;
if(index >= 0 && index <= size() ) {
if(index == 0)
cur = front;
else {
cur = front;
for(int i=0; i<index; i++)
cur = cur.getNext();
}
} // else { System.out.println(index out of bounds!); }
return cur;
}
public void addAll(LinkedList other) {
Node cur = other.getFrontNode();
while(cur != null) {
addToEnd(cur.getData());
cur = cur.getNext();
}
}
public static LinkedList merge(LinkedList first, LinkedList second) {
LinkedList result = new LinkedList();
Node cur = first.getFrontNode();
while(cur != null) {
result.addToEnd(cur.getData());
cur = cur.getNext();
}
cur = second.getFrontNode();
while(cur != null) {
result.addToEnd(cur.getData());
cur = cur.getNext();
}
return result;
}
public LinkedList subList(int start, int end) {
LinkedList result = new LinkedList();
if(!(start >= end || start < 0 || start > size() || end >= size() )) {
Node cur = getFrontNode();
for(int i=0; i<start; i++) {
cur = cur.getNext();
}
for(int i=start; i<=end; i++) {
addToEnd(cur.getData());
cur = cur.getNext();
}
}
return result;
}
public static LinkedList union(LinkedList first, LinkedList second) {
LinkedList result = new LinkedList();
Node cur = first.getFrontNode();
while(cur != null) {
result.addToEnd(cur.getData());
cur = cur.getNext();
}
cur = second.getFrontNode();
while(cur != null) {
if(result.contains(cur.getData()) == -1)
result.addToEnd(cur.getData());
cur = cur.getNext();
}
return result;
}
public static LinkedList intersection(LinkedList first, LinkedList second) {
LinkedList result = new LinkedList();
Node cur = first.getFrontNode();
while(cur != null) {
if(second.contains(cur.getData()) != -1)
result.addToEnd(cur.getData());
cur = cur.getNext();
}
return result;
}
}
public class Node {
private String data;
private Node next;
public Node(String d, Node n ) {
data = d;
next = n;
}
// The usual get/set methods, plus toString()
public void setData(String d) {
data = d;
}
public void setNext(Node n) {
next = n;
}
public String getData() {
return data;
}
public Node getNext() {
return next;
}
public String toString() {
return data + " --> ";
}
}
Explanation / Answer
/**
*
* @author Sam
*/
public class LinkedListStack {
LinkedList stack;
public LinkedListStack() {
stack = new LinkedList();
}
public void push(String data) {
stack.addToFront(data);
}
public String pop() {
String result = stack.getFrontData();
stack.removeFront();
return result;
}
public String peek() {
return stack.getFrontData();
}
}
This should do its job (as a stack) :D
-----------------------------UPDATE----------------------------
class StackDriver {
public static void main(String[] args) throws IOException {
LinkedListStack stack = new LinkedListStack();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean loop = true;
while (loop) {
System.out.println("1. Push "
+ "2. Pop "
+ "3. Peek "
+ "4. Exit "
+ "Enter choice[1-4]: ");
int choice = Integer.parseInt(br.readLine());
switch(choice) {
case 1:
System.out.print("Enter sting to push: ");
stack.push(br.readLine());
break;
case 2:
System.out.println("'" + stack.pop() + "' popped");
break;
case 3:
System.out.println("'" + stack.peek() + "' peeked");
break;
case 4:
loop = false;
break;
default:
System.out.println("Wrong choice!");
}
}
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.