2013-02-11 4 views
1

Мне нужно написать связанный список для номеров социального обеспечения и реализовать всю операцию самостоятельно. Я написал класс Node и список, но у меня возникли проблемы с внедрением метода sortedGet (int index). Что я делаю неправильно в этом методе?Внедрение списка в Java

package listpackage; 

import listpackage.SocialNode; 

public class SortedListRefBasedDuplicates{ 
private SocialNode head; 
private int numItems = 0; 


public SortedListRefBasedDuplicates(){ 
    head = null; 
} 

public SocialNode getHead(){ 
    return this.head; 
} 

public boolean sortedIsEmpty(){ 
    return numItems == 0; 
} 

public int sortedSize(){ 
    return numItems; 
} 

public SocialNode sortedGet(int index){ 
    if(index == 0) 
     return head; 
    //else if(index >= 0 && index < sortedSize()){ 
     //for (int i = 0; i < index; i++){ 
      //head = head.getNext(); 
     //} 
     //return head; 
    //}else{ 
     //return null; 
    //} 
    else 
     return null; 
} 

public void sortedAdd(int social){ 
    if(this.sortedIsEmpty()){ 
     head = new SocialNode(social); 
     head.setNext(null); 
     numItems++; 
    }else{ 
     int socialIndex = locateIndex(social); 
     if(socialIndex == this.sortedSize()){ 
      SocialNode curr = sortedGet(socialIndex-1); 
      SocialNode scn = new SocialNode(social); 
      curr.setNext(scn); 
      numItems++; 
     }else{ 
      if(socialIndex == 0){ 
       SocialNode scn = new SocialNode(social); 
       scn.setNext(head); 
       head = scn; 
       numItems++; 
      }else{ 
       SocialNode curr = sortedGet(socialIndex-1); 
       SocialNode prev = sortedGet(socialIndex-2); 
       SocialNode scn = new SocialNode(social, curr); 
       prev.setNext(scn); 
       numItems++; 
      } 
     } 
    } 
} 

public void sortedDelete(int social){ 

} 

public int locateIndex(int social){ 
    if(numItems == 0) 
     return 0; 
    else{ 
     int index = 0; 
     while(head != null){ 
      if(head.getData() < social){ 
       index ++; 
       head = head.getNext(); 
      } 
      else{ 
       break; 
      } 
     } 
     return index; 
    } 
    } 
} 

package listpackage; 

public class SocialNode{ 
private int social; 
private SocialNode next; 

public SocialNode(int social){ 
    this.social = social; 
    next=null; 
} 

public SocialNode(int social, SocialNode nextNode){ 
    this.social = social; 
    this.next = nextNode; 
} 

public int getData(){ 
    return social; 
} 

public SocialNode getNext(){ 
    return next; 
} 

public void setSocial(int s){ 
    social = s; 
} 

public void setNext(SocialNode s){ 
    next = s; 
} 
} 

Добавлено sortedDelete Метод

public void sortedDelete(int social){ 
if(sortedIsEmpty()){ 
    System.out.println("List is Empty"); 
} 
else if(sortedSize() == 1){ 
    if(head.getData() == social) 
     head = null; 
}else{ 
    SocialNode x = head; 
    if(x.getData() == social) 
     head = head.getNext(); 
    else{ 
     int count = 1; 
     while(x!= null){ 
      if(x.getData() == social && x.getNext() != null){ 
       sortedGet(count-1).setNext(sortedGet(count+1)); 
       break; 
      }else{ 
       sortedGet(count-1).setNext(null); 
      } 
      x = x.getNext(); 
      count ++; 
     } 
    } 
    } 
} 

Как удалить узел из списка, приведенного значения узла?

+3

Что sortedGet должен делать – smk

+0

вы пытаетесь получить определенный узел из списка на основе 'index'? – SNpn

+0

Предполагается вернуть узел, соответствующий этому индексу. Напр. если индекс равен 5, верните 5-й узел. Я использую его в методе sortedAdd, поэтому я знаю, куда вставить следующий узел, поскольку это отсортированный список. – Leon

ответ

8

Основная проблема, которую я вижу, состоит в том, что вы выполняете итерацию в списке, напрямую изменяя переменную экземпляра head, поэтому список изменяется, когда вы выполняете итерацию на нем, вместо этого вы должны использовать локальную переменную.

+0

Так что я должен сделать Node x = head, а затем использовать x вместо головы? – Leon

+0

Да, а затем выполните 'x = x.getNext()'. – Jack

+0

Спасибо за его работу до определенного момента. Будет лучше изучать его. – Leon

0

Полное Осуществление SortedList

package listpackage; 

import listpackage.SocialNode; 

public class SortedListRefBasedDuplicates{ 
private SocialNode head; 
private int numItems = 0; 


public SortedListRefBasedDuplicates(){ 
    head = null; 
} 

public SocialNode getHead(){ 
    return this.head; 
} 

public boolean sortedIsEmpty(){ 
    return numItems == 0; 
} 

public int sortedSize(){ 
    return numItems; 
} 

public SocialNode sortedGet(int index){ 
    SocialNode s = head; 
    if(index == 0) 
     return s; 
    else if(index >= 0 && index < sortedSize()){ 
     for (int i = 0; i < index; i++){ 
      s = s.getNext(); 
     } 
     return s; 
    }else{ 
     return null; 
    } 
} 

public void sortedAdd(int social){ 
    if(this.sortedIsEmpty()){ 
     head = new SocialNode(social); 
     head.setNext(null); 
     numItems++; 
    }else{ 
     int socialIndex = locateIndex(social); 
     if(socialIndex == this.sortedSize()){ 
      SocialNode curr = sortedGet(socialIndex-1); 
      SocialNode scn = new SocialNode(social); 
      curr.setNext(scn); 
      numItems++; 
     }else{ 
      if(socialIndex == 0){ 
       SocialNode scn = new SocialNode(social); 
       scn.setNext(head); 
       head = scn; 
       numItems++; 
      }else{ 
       SocialNode curr = sortedGet(socialIndex); 
       SocialNode prev = sortedGet(socialIndex-1); 
       SocialNode scn = new SocialNode(social, curr); 
       prev.setNext(scn); 
       numItems++; 
      } 
     } 
    } 
} 

public void sortedDelete(int social){ 
    if(sortedIsEmpty()){ 
     System.out.println("List is Empty"); 
    } 
    else if(sortedSize() == 1){ 
     if(head.getData() == social){ 
      head = null; 
      numItems--; 
     } 
    }else{ 
     SocialNode x = head; 
     if(x.getData() == social){ 
      head = head.getNext(); 
      numItems--; 
     } 
     else{ 
      int count = 1; 
      x = x.getNext(); 
      while(x!= null){ 
       if(x.getData() == social && x.getNext() != null){ 
        sortedGet(count-1).setNext(sortedGet(count+1)); 
        numItems--; 
       }else if(x.getData() == social && x.getNext() == null){ 
        sortedGet(count-1).setNext(null); 
        numItems--; 
       } 
       x = x.getNext(); 
       count ++; 
      } 
     } 
    } 
} 

public int locateIndex(int social){ 
    SocialNode x = head; 
    if(numItems == 0) 
     return 0; 
    else{ 
     int index = 0; 
     while(x != null){ 
      if(x.getData() < social){ 
       index ++; 
       x = x.getNext(); 
      } 
      else{ 
       break; 
      } 
     } 
     return index; 
    } 
} 
} 
Смежные вопросы