Java 在双链接列表中使用“临时”变量
我应该在一个给定的练习中用Java制作一个双链接列表。使用临时变量存储值以便对列表进行升序/降序排序是一种好的做法吗?是否可以在不使用这些临时/辅助变量的情况下对其进行升序/降序排序?在过去的几个小时里,我一直在努力,但没有成功 我是这样宣布我的名单的:Java 在双链接列表中使用“临时”变量,java,list,sorting,Java,List,Sorting,我应该在一个给定的练习中用Java制作一个双链接列表。使用临时变量存储值以便对列表进行升序/降序排序是一种好的做法吗?是否可以在不使用这些临时/辅助变量的情况下对其进行升序/降序排序?在过去的几个小时里,我一直在努力,但没有成功 我是这样宣布我的名单的: private static class List { public int num; public List next; public List previous; } 在我的主要方法中,我声明了起点和终点: List star
private static class List {
public int num;
public List next;
public List previous;
}
在我的主要方法中,我声明了起点和终点:
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;
}
在列表的末尾:
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次,但它总是失去对下一个或以前地址的引用。我是一个初学者。你知道不使用临时变量交换两个数字有一个众所周知的问题。寻找这个问题,临时变量就会消失。你可能会发现查找排序列表的算法很有用。有很多,针对不同的情况进行了优化,你可以在这里调整其中一个。