2016-04-16 130 views
0

此插入排序属于双向链接列表。它似乎没有打印任何东西。对不起,如果这是混乱。发布内容我相当新。我通过放入sysout来调试它。我相信有一个交换问题,我用sysout &我注意到这是问题发生的地方。任何帮助将不胜感激。我也检查了我的应用程序类似乎很好。交换插入排序不工作在双向链接列表

public boolean insertionSort() 
{ 
if (getFirst().next != null) 
{ 
    return false; 
} 
    Link current = getFirst().next; 
    Link current2 = current; 

    while(current != null){ 
    current2 = current; 
    while(current2.prev != null){ 
     int tempID = Integer.valueOf(current2.Data.getID()); 
     int temp2ID = Integer.valueOf(current2.prev.Data.getID()); 
if(tempID < temp2ID) 
    { 
    swap(current2, current.prev); 
    } 
    current2 = current2.prev; 
} 
    current = current.next; 
} 
    return true; 
} 


public void swap(Link x, Link y) 
    {  

    Link previousNode1 = x.prev; 

    Link nextNode1 = x.next; 

    Link previousNode2 = y.prev; 

    Link nextNode2 = y.next; 


    if (x.next == y || y.next == x) 
    { 

     previousNode1.next = y; 

     y.prev = (previousNode1); 

     nextNode2.next = (x); 

     x.next = (nextNode2); 

     x.prev = (y); 

     y.next = (x); 
    } 


    else 
    { 
     y.prev = (previousNode1); 

     y.next = (nextNode1); 

     nextNode1.prev = (y); 

     previousNode1.next = (y); 

     x.prev = (previousNode2); 

     x.next = (nextNode2); 

     nextNode2.prev = (x); 

     previousNode2.next = (x); 
    } 

} // end swap 

回答

0

您只给出了部分代码。所以很难弄清究竟是什么错误。但乍一看你插入排序方法,这是什么是错的:在一开始你有一个条件语句

if (getFirst().next != null){ 
    return false; 
} 

这意味着该功能将如果getFirst()立即返回其次是不为空。如果程序流程满足这个条件,即getFirst()。next为null,则将这个null分配给两个变量current和current2。然后运行条件为while(current != null){...}的while循环。这个函数应该怎么做?

首先,更正if条件。可能只有在getFirst()。next为null时才需要返回(如果不为null,则不返回)。然后,看看你是否得到你想要的输出。如果没有,请提供有关您的问题的更多详细信息。