Java 在双链接列表中使用“临时”变量

Java 在双链接列表中使用“临时”变量,java,list,sorting,Java,List,Sorting,我应该在一个给定的练习中用Java制作一个双链接列表。使用临时变量存储值以便对列表进行升序/降序排序是一种好的做法吗?是否可以在不使用这些临时/辅助变量的情况下对其进行升序/降序排序?在过去的几个小时里,我一直在努力,但没有成功 我是这样宣布我的名单的: private static class List { public int num; public List next; public List previous; } 在我的主要方法中,我声明了起点和终点: List star

我应该在一个给定的练习中用Java制作一个双链接列表。使用临时变量存储值以便对列表进行升序/降序排序是一种好的做法吗?是否可以在不使用这些临时/辅助变量的情况下对其进行升序/降序排序?在过去的几个小时里,我一直在努力,但没有成功

我是这样宣布我的名单的:

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次,但它总是失去对下一个或以前地址的引用。我是一个初学者。

你知道不使用临时变量交换两个数字有一个众所周知的问题。寻找这个问题,临时变量就会消失。

你可能会发现查找排序列表的算法很有用。有很多,针对不同的情况进行了优化,你可以在这里调整其中一个。