我尝试使用插入排序按标题按字母顺序对书籍的链接列表进行排序。
到目前为止我做了什么:
public void insertSorted(Book book){
if(books.getfirst()==null)
books.addFirst(book); //books is the LinkedList name
Node<Book> current =books.getfirst();
for(int i=0; i<books.getSize(); i++){
if(book.getTitle().compareToIgnoreCase(current.element.getTitle())<=0){
books.add(book, i);
}
}
Linkedlist中的add方法:
public void add(Object x,int index){
if(index==0)addFirst(x);
else if(index>=getSize())addLast(x);
else{
Node current=first;
for(int i=0; i<index-1;i++)
current=current.next;
Node temp = new Node(x);
temp.next=current.next;
current.next=temp;
count++;
}
}
究竟我做错了什么?
答案 0 :(得分:1)
for(int i=0; i<books.getSize(); i++){
if(book.getTitle().compareToIgnoreCase(current.element.getTitle())<=0){
books.add(book, i);
}
使用此语句(上文),您不会递增正在比较的当前Node
。在for(;;)
循环的每次迭代中,您正在比较正在添加到Book
中第一个元素的新List
。
以下代码示例应解决此问题:
for(int i=0; i<books.getSize(); i++){
if(book.getTitle().compareToIgnoreCase(current.element.getTitle())<=0){
books.add(book, i);
break;
}
else {
current = current.next;
}
编辑:根据@Eden Lu回答
包含必需的break语句答案 1 :(得分:1)
将图书添加到图书后,您需要打破循环
books.add(书,I); 打破;