使用Book对象的链接列表进行插入排序

时间:2016-04-06 03:11:25

标签: java linked-list insertion-sort

我尝试使用插入排序按标题按字母顺序对书籍的链接列表进行排序。

到目前为止我做了什么:

 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++;
    }
}

究竟我做错了什么?

2 个答案:

答案 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); 打破;