This is java language and i need help on create a sublist method in the given co
ID: 3878613 • Letter: T
Question
This is java language and i need help on create a sublist method in the given codes. import java.io.Serializable; import java.util.*; public class MyLinkedList implements List<Object>, Serializable, Cloneable { /** * */ private static final long serialVersionUID = 1L; ListNode head; int size; //inner class for ListNode private class ListNode { private Object data; private ListNode next; private ListNode(Object d) { this.data = d; this.next = null; } private ListNode (Object d, ListNode next){ this.data = d; this.next = next; } private ListNode() { } } public MyLinkedList() { this.head = new ListNode(null); this.size = 0; } public void addFirst(Object data){ ListNode temp = new ListNode(data); temp.next = this.head.next; this.head.next = temp; this.size++; } public void addLast (Object data){ if(isEmpty()) addFirst(data); else { ListNode cur = this.head; while(cur.next != null){ cur = cur.next; } cur.next = new ListNode(data,null); this.size++; } } @Override public boolean equals(Object o){ if(o == null){ throw new NullPointerException("NULL parameter passed on call to equals(Object)"); } if(o == this){ return true; } if(o instanceof MyLinkedList){ MyLinkedList list = (MyLinkedList)o; if(this.size == 0 && list.size() == 0){ return true; } if(this.size == list.size()){ boolean ret = true; ListNode cur, cur2; cur = this.head.next; cur2 = list.head.next; for(; cur!= null && cur2!= null; cur = cur.next, cur2 = cur2.next){ if(cur.data.equals(cur2.data) != true){ ret = false; } }// end for return ret; }// end if(size == size) else{ return false; } }// end if(instanceof) return false; }// end equals() @Override public Iterator<Object> iterator() { return new MyLinkedListIterator(this.head); } /* @Override public int hashCode() { int value; return value; }*/ @Override public int size() { return this.size; } @Override public boolean isEmpty() { return size == 0; } @Override public boolean contains(Object o) { Iterator<Object> it = this.iterator(); while(it.hasNext()) { Object temp = it.next(); if(temp != null && o != null && temp.equals(o)) { return true; } else if(temp == null && o == null) { return true; } } return false; } @Override public Object[] toArray() { throw new UnsupportedOperationException(); } @Override public <Object> Object[] toArray(Object[] a) { throw new UnsupportedOperationException(); } @Override public boolean remove(Object o) { for(ListNode prev = this.head, walk = this.head.next; walk != null; prev = walk,walk = walk.next){ if (walk.data.equals(o)) { //should override equals in your class Object prev.next = walk.next; this.size --; return true; } }//end for return false; } @Override public boolean containsAll(Collection c) { for(Object e : c) { if (!contains(e)) return false; } return true; } @Override public boolean addAll(Collection c) throws NullPointerException { if ( c == null ) { throw new NullPointerException("Collection passed in is null!"); } Iterator itr= c.iterator(); while(itr.hasNext()){ add(itr.next()); this.size ++; } return true; } @Override public boolean addAll(int index, Collection c) { // TODO Auto-generated method stub if (c == null) { throw new NullPointerException(); } if (index < 0 || index > size) { throw new IndexOutOfBoundsException(); } ListNode cur = this.head; MyLinkedList temp = new MyLinkedList(); temp.addAll(c); ListNode curTemp = temp.head; ListNode curr = head; ListNode firstIndexTemp = temp.head; if(index == 0){ curTemp = curTemp.next; firstIndexTemp = firstIndexTemp.next; while( curTemp.next != null){ curTemp = curTemp.next; } curTemp.next = curr.next; curr.next = firstIndexTemp; } else{ for(int i = 0; i < index; i++){ curr = curr.next; } curTemp = curTemp.next; firstIndexTemp = firstIndexTemp.next; while( curTemp.next != null){ curTemp = curTemp.next; } curTemp.next = curr.next; curr.next = firstIndexTemp; } return true; } private ListNode findPrev(int index){ if (index == 0) return null; ListNode prev = head; for (int i = 1; i < index -1; i++){ prev = prev.next; } return prev; } @Override public boolean removeAll(Collection c) throws NullPointerException, UnsupportedOperationException{ // TODO Auto-generated method stub // Do not need to implement optional exceptions // Check documentation Boolean changed = false; Iterator<Object> thisIt = this.iterator(); if(c == null){ throw new NullPointerException(); } while(thisIt.hasNext()) { if( c.contains(thisIt.next()) ) { try{ thisIt.remove(); this.size --; changed = true; }catch(UnsupportedOperationException ex) { throw new UnsupportedOperationException(); } } }//end of while return changed; } @Override public boolean retainAll(Collection c) { // TODO Auto-generated method stub if (c==null) throw new NullPointerException(); if (this.head == null) return true; while(head.next != null){ head = head.next; } addAll(c); return true; } @Override public void clear() { // TODO Auto-generated method stub head = null; size = 0; } @Override public Object get(int index) throws IndexOutOfBoundsException{ if(index < 0 || index >= size()) { throw new IndexOutOfBoundsException("Provided index is out of bounds! " + index); } ListNode walk = head; for(int cur = 0; cur < index; walk = walk.next, cur ++){ //empty loop body } return walk.data; } @Override public Object set(int index, Object element) { // TODO Auto-generated method stub if (index < 0 || index >= this.size) throw new IndexOutOfBoundsException("Provided index is out of bounds! " + index); ListNode temp = new ListNode(element); ListNode cur = this.head.next; ListNode prev = this.head; if (index == 0){ prev.next = temp; temp.next = cur.next; } else{ for(int i = 0; i < index ; i++){ prev = prev.next; cur = cur.next; } prev.next = temp; temp.next = cur.next; } return null; } @Override public void add(int index, Object element) throws IndexOutOfBoundsException{ // TODO Auto-generated method stub if( index < 0 || index >= this.size +1){ throw new IndexOutOfBoundsException("Provided invalid index integer! " + index); } ListNode temp = new ListNode(element); ListNode curr = head; if (index == 0){ temp.next = curr.next; curr.next = temp; } else{ for(int i = 0; i < index ; i++){ curr=curr.next; } temp.next = curr.next; curr.next = temp; } this.size++; } @Override public Object remove(int index) throws IndexOutOfBoundsException { if(index < 0 || index >= size()) { throw new IndexOutOfBoundsException("Provided index is out of bounds! " + index); } ListNode walk = head.next; ListNode prev = head; for(int cur = 0; cur < index; cur ++){ prev = walk; walk = walk.next; } this.size --; prev.next = walk.next; return walk.data; } @Override public int indexOf(Object o) { // TODO Auto-generated method stub ListNode curr = head.next; for (int i = 0; i < size; i++){ if( o == null){ if(curr.data == null){ return i; } } else{ if(o.equals(curr.data)){ return i; } } curr = curr.next; } return -1; } @Override public int lastIndexOf(Object o) { // TODO Auto-generated method stub ListNode curr = head.next; int lastindex = 0; for (int i = 0; i < size; i++){ if( o == null){ if(curr.data == null){ return i; } } else{ if(o.equals(curr.data)){ lastindex = i; } } curr = curr.next; } if(lastindex == 0) return -1; return lastindex; } @Override public ListIterator<Object> listIterator() { // TODO Auto-generated method stub return null; } @Override public ListIterator<Object> listIterator(int index) { // TODO Auto-generated method stub return null; } @Override public List<Object> subList(int fromIndex, int toIndex) { // TODO Auto-generated method stub if(fromIndex < 0 || toIndex > this.size){ throw new IndexOutOfBoundsException("Provided invalid index! "); }/* else { MyLinkedList sublist = new MyLinkedList(); ListNode cur = this.head; Iterator it = this.iterator(); MyLinkedList temp = new MyLinkedList(); temp = for( int i = 0; i <= toIndex; i++){ if(i >= fromIndex && i <= toIndex){ sublist.add(it.next()); sublist.size++; it.hasNext(); }//end if }//end for loop Iterator subit = sublist.iterator(); while(subit.hasNext()){ System.out.println(subit.next()); } }//end else*/ return null; } @Override //this method is equivalent to addLast() public boolean add(Object e) { ListNode walk = head; for(;walk.next != null; walk = walk.next){ //empty loop body } //make new node ListNode anode = new ListNode(e); walk.next = anode; this.size ++; //increment size return true; } public class MyLinkedListIterator implements Iterator<Object> { private ListNode cur; private MyLinkedListIterator ( ListNode start ) { this.cur = start.next; //with dummy node } public boolean hasNext() { return cur != null; } public Object next() throws NoSuchElementException { if(hasNext()) { Object data = cur.data; cur = cur.next; return data; } throw new NoSuchElementException(); } public void remove() { throw new UnsupportedOperationException(); } }//end of Iterator @Override public String toString() { String result = "( "; for (ListNode node = this.head.next; node != null; node = node.next) { result += node.data + "-->"; } return result + ")"; } }
Explanation / Answer
import java.io.Serializable;
import java.util.*;
public class MyLinkedList implements List<Object>,
Serializable, Cloneable {
/**
*
*/
private static final long serialVersionUID = 1L;
ListNode head;
int size;
//inner class for ListNode
private class ListNode {
private Object data;
private ListNode next;
private ListNode(Object d) {
this.data = d;
this.next = null;
}
private ListNode (Object d, ListNode next){
this.data = d;
this.next = next;
}
private ListNode() {
}
}
public MyLinkedList() {
this.head = new ListNode(null);
this.size = 0;
}
public void addFirst(Object data){
ListNode temp = new ListNode(data);
temp.next = this.head.next;
this.head.next = temp;
this.size++;
}
public void addLast (Object data){
if(isEmpty())
addFirst(data);
else {
ListNode cur = this.head;
while(cur.next != null){
cur = cur.next;
}
cur.next = new ListNode(data,null);
this.size++;
}
}
@Override
public boolean equals(Object o){
if(o == null){
throw new NullPointerException("NULL parameter passed on call to equals(Object)");
}
if(o == this){
return true;
}
if(o instanceof MyLinkedList){
MyLinkedList list = (MyLinkedList)o;
if(this.size == 0 && list.size() == 0){
return true;
}
if(this.size == list.size()){
boolean ret = true;
ListNode cur, cur2;
cur = this.head.next;
cur2 = list.head.next;
for(; cur!= null && cur2!= null; cur = cur.next, cur2 = cur2.next){
if(cur.data.equals(cur2.data) != true){
ret = false;
}
}// end for
return ret;
}// end if(size == size)
else{
return false;
}
}// end if(instanceof)
return false;
}// end equals()
@Override
public Iterator<Object> iterator() {
return new MyLinkedListIterator(this.head);
}
/* @Override
public int hashCode() {
int value;
return value;
}*/
@Override
public int size() {
return this.size;
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public boolean contains(Object o) {
Iterator<Object> it = this.iterator();
while(it.hasNext()) {
Object temp = it.next();
if(temp != null && o != null && temp.equals(o)) {
return true;
}
else if(temp == null && o == null) {
return true;
}
}
return false;
}
@Override
public Object[] toArray() {
throw new UnsupportedOperationException();
}
@Override
public <Object> Object[] toArray(Object[] a) {
throw new UnsupportedOperationException();
}
@Override
public boolean remove(Object o) {
for(ListNode prev = this.head, walk = this.head.next;
walk != null; prev = walk,walk = walk.next){
if (walk.data.equals(o)) { //should override equals in your class Object
prev.next = walk.next;
this.size --;
return true;
}
}//end for
return false;
}
@Override
public boolean containsAll(Collection c) {
for(Object e : c) {
if (!contains(e))
return false;
}
return true;
}
@Override
public boolean addAll(Collection c) throws NullPointerException {
if ( c == null ) {
throw new NullPointerException("Collection passed in is null!");
}
Iterator itr= c.iterator();
while(itr.hasNext()){
add(itr.next());
this.size ++;
}
return true;
}
@Override
public boolean addAll(int index, Collection c) {
// TODO Auto-generated method stub
if (c == null) {
throw new NullPointerException();
}
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException();
}
ListNode cur = this.head;
MyLinkedList temp = new MyLinkedList();
temp.addAll(c);
ListNode curTemp = temp.head;
ListNode curr = head;
ListNode firstIndexTemp = temp.head;
if(index == 0){
curTemp = curTemp.next;
firstIndexTemp = firstIndexTemp.next;
while( curTemp.next != null){
curTemp = curTemp.next;
}
curTemp.next = curr.next;
curr.next = firstIndexTemp;
}
else{
for(int i = 0; i < index; i++){
curr = curr.next;
}
curTemp = curTemp.next;
firstIndexTemp = firstIndexTemp.next;
while( curTemp.next != null){
curTemp = curTemp.next;
}
curTemp.next = curr.next;
curr.next = firstIndexTemp;
}
return true;
}
private ListNode findPrev(int index){
if (index == 0)
return null;
ListNode prev = head;
for (int i = 1; i < index -1; i++){
prev = prev.next;
}
return prev;
}
@Override
public boolean removeAll(Collection c) throws NullPointerException,
UnsupportedOperationException{
// TODO Auto-generated method stub
// Do not need to implement optional exceptions
// Check documentation
Boolean changed = false;
Iterator<Object> thisIt = this.iterator();
if(c == null){
throw new NullPointerException();
}
while(thisIt.hasNext()) {
if( c.contains(thisIt.next()) ) {
try{
thisIt.remove();
this.size --;
changed = true;
}catch(UnsupportedOperationException ex) {
throw new UnsupportedOperationException();
}
}
}//end of while
return changed;
}
@Override
public boolean retainAll(Collection c) {
// TODO Auto-generated method stub
if (c==null)
throw new NullPointerException();
if (this.head == null)
return true;
while(head.next != null){
head = head.next;
}
addAll(c);
return true;
}
@Override
public void clear() {
// TODO Auto-generated method stub
head = null;
size = 0;
}
@Override
public Object get(int index) throws IndexOutOfBoundsException{
if(index < 0 || index >= size()) {
throw new IndexOutOfBoundsException("Provided index is out of bounds! " + index);
}
ListNode walk = head;
for(int cur = 0; cur < index; walk = walk.next, cur ++){
//empty loop body
}
return walk.data;
}
@Override
public Object set(int index, Object element) {
// TODO Auto-generated method stub
if (index < 0 || index >= this.size)
throw new IndexOutOfBoundsException("Provided index is out of bounds! " + index);
ListNode temp = new ListNode(element);
ListNode cur = this.head.next;
ListNode prev = this.head;
if (index == 0){
prev.next = temp;
temp.next = cur.next;
}
else{
for(int i = 0; i < index ; i++){
prev = prev.next;
cur = cur.next;
}
prev.next = temp;
temp.next = cur.next;
}
return null;
}
@Override
public void add(int index, Object element) throws IndexOutOfBoundsException{
// TODO Auto-generated method stub
if( index < 0 || index >= this.size +1){
throw new IndexOutOfBoundsException("Provided invalid index integer! " + index);
}
ListNode temp = new ListNode(element);
ListNode curr = head;
if (index == 0){
temp.next = curr.next;
curr.next = temp;
}
else{
for(int i = 0; i < index ; i++){
curr=curr.next;
}
temp.next = curr.next;
curr.next = temp;
}
this.size++;
}
@Override
public Object remove(int index) throws IndexOutOfBoundsException {
if(index < 0 || index >= size()) {
throw new IndexOutOfBoundsException("Provided index is out of bounds! " + index);
}
ListNode walk = head.next;
ListNode prev = head;
for(int cur = 0; cur < index; cur ++){
prev = walk;
walk = walk.next;
}
this.size --;
prev.next = walk.next;
return walk.data;
}
@Override
public int indexOf(Object o) {
// TODO Auto-generated method stub
ListNode curr = head.next;
for (int i = 0; i < size; i++){
if( o == null){
if(curr.data == null){
return i;
}
}
else{
if(o.equals(curr.data)){
return i;
}
}
curr = curr.next;
}
return -1;
}
@Override
public int lastIndexOf(Object o) {
// TODO Auto-generated method stub
ListNode curr = head.next;
int lastindex = 0;
for (int i = 0; i < size; i++){
if( o == null){
if(curr.data == null){
return i;
}
}
else{
if(o.equals(curr.data)){
lastindex = i;
}
}
curr = curr.next;
}
if(lastindex == 0)
return -1;
return lastindex;
}
@Override
public ListIterator<Object> listIterator() {
// TODO Auto-generated method stub
return null;
}
@Override
public ListIterator<Object> listIterator(int index) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<Object> subList(int fromIndex, int toIndex) {
// TODO Auto-generated method stub
MyLinkedList newList = new MyLinkedList();
if(fromIndex < 0 || toIndex > this.size){
throw new IndexOutOfBoundsException("Provided invalid index! ");
}
else{
int i = 0;
ListNode node = null;
for (node = this.head.next; node != null && i<fromIndex;node = node.next);
while(node!=null && i<toIndex){
newList.add(node.data);
node = node.next;
}
}
return newList;
}
@Override
//this method is equivalent to addLast()
public boolean add(Object e) {
ListNode walk = head;
for(;walk.next != null; walk = walk.next){
//empty loop body
}
//make new node
ListNode anode = new ListNode(e);
walk.next = anode;
this.size ++; //increment size
return true;
}
public class MyLinkedListIterator implements Iterator<Object> {
private ListNode cur;
private MyLinkedListIterator ( ListNode start ) {
this.cur = start.next; //with dummy node
}
public boolean hasNext() {
return cur != null;
}
public Object next() throws NoSuchElementException {
if(hasNext()) {
Object data = cur.data;
cur = cur.next;
return data;
}
throw new NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException();
}
}//end of Iterator
@Override
public String toString() {
String result = "( ";
for (ListNode node = this.head.next; node != null;
node = node.next) {
result += node.data + "-->";
}
return result + ")";
}
}
=========
I have done the changes , have a look. Thanks
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.