我应该在给定的练习中用Java创建双链表。使用临时变量来存储值以便对列表进行升序/降序排序是一种好习惯吗?是否可以在不使用这些临时/辅助变量的情况下对其进行升序/降序排序?我在过去的几个小时里一直试图这样做但是没有成功。
这是我宣布我的名单的方式:
private static class List {
public int num;
public List next;
public List previous;
}
在我的 main 方法中,我声明了起点和终点:
List start = null;
List end = null;
List current;
然后,该练习要求允许在列表的开头和结尾添加数字。这是我在列表开头添加它的方式:
List newElement = new List();
newElement.num = input.nextInt();
if (start == null) {
start = newElement;
end = newElement;
newElement.next = null;
newElement.previous = null;
} else {
newElement.next = start;
start = newElement;
start.next.previous = start;
}
在列表的末尾:
newElement.num = input.nextInt();
if (start == null) {
start = newElement;
end = newElement;
newElement.next = null;
newElement.previous = null;
} else {
end.next = newElement;
end.previous = end;
end = newElement;
newElement.next = null;
}
最后,我如何按升序排序:
current = start;
int tmp = 0; //temporary variable that I do not know wether I'm supposed to use or not
while (current.next != null) {
if (current.num > current.next.num) {
tmp = current.next.num;
current.next.num = current.num;
current.num = tmp;
}
current = current.next;
}
current = end;
tmp = 0;
while (current.previous != null) {
if (current.num < current.previous.num) {
tmp = current.previous.num;
current.previous.num = current.num;
current.num = tmp;
}
current = current.previous;
}
有时它会根据另一个数字来扰乱某些数字,所以我认为它不正确。为了解决这个问题,我尝试检查列表正向和反向,正如您在上面的代码中看到的那样,但显然不是问题。
有没有办法在不使用临时变量的情况下对其进行升序排序?我已经尝试了至少20次,但它总是丢失对下一个或以前的地址的引用。我是初学者。
答案 0 :(得分:-1)
您是否知道在不使用临时变量的情况下交换两个数字存在一个众所周知的问题。看看它,临时变量就会消失。