我在我的代码中实现了Singly链表,我必须对列表进行排序。 但是我的代码不起作用,它陷入无限循环。我必须按照升序顺序比较节点。
我无法使用数组。 这是我的SLL节点实现。
class SLLNode implements Comparable<SLLNode> {
protected int id;
protected int plata;
protected SLLNode succ;
public SLLNode(int id,int plata, SLLNode succ) {
this.id = id;
this.plata=plata;
this.succ = succ;
}
@Override
public int compareTo(SLLNode o) {
return o.id - this.id;
}
}
public static void sort(SLL lista){
SLLNode current;
boolean check = true;
while(check) {
current = lista.getFirst();
check = false;
while(current.succ != null)
{
if(current.compareTo(current.succ) > 0)
{
SLLNode temp = current;
current=current.succ;
current.succ=temp;
check = true;
}
current = current.succ;
}
}
}
答案 0 :(得分:2)
你的问题在这里:
// Take a copy of current.
SLLNode temp = current;
// Step to next.
current=current.succ;
// Point temp (old current) to new next <----- Added this.
temp.succ = current.succ;
// Point next's successor to current.
current.succ=temp;
// Remember to check again.
check = true;
您缺少更改temp.succ
。您需要在适当的位置将其设置为current.succ
。
总之 - 要交换两个节点a和b,您需要执行以下操作:
如果没有链接列表的示例实现,我无法对此进行测试。
答案 1 :(得分:0)
node * sorted_list(node * head) {
node *index1,*index2;
enter code here
for(index1=head;index1->next!=NULL;index1=index1->next)
{
for(index2=index1->next;index2!=NULL;index2=index2->next)
{
if(index1->data>index2->data)
{
int temp=index1->data;
index1->data=index2->data;
index2->data=temp;
}
}
}
return head;
}