从链表中删除具有最大值的节点



我想从我的线性链表中删除具有最大通用 T 对象的节点(列表只有 head(并返回该节点的对象。方法签名必须如下所示,以及到目前为止我得到的代码:

列表如下所示:

public List<T extends Comparable<T>>{
private Node<T> head;
public List(){
this.head = null;
}
//inner class Node
public class Node<T>{
T obj;
Node<T> next;
}
public Node(T obj){
this.obj = obj;
}
//the method my question is about
public T remove(){
if(head == null) return null;
else {
Node<T> act = head;
Node<T> prev = head //previous Node
Node<T> biggest;
while(act != null){
if(act.obj.compareTo(prev.obj) > 0) {
biggest = act;
}
prev = p;
p = p.next;
}
return biggest.obj;
}
}

此代码仅获取最大的对象,但不删除节点。我不知道如何调整 while 循环来删除节点。如果我找到最大的元素,prev.next 指针必须以某种方式转到 act.next 节点。

您的代码当前所做的是将两个相邻的节点进行比较if(act.obj.compareTo(prev.obj),其中我假设节点不是按值排序的(您在问题中没有提到它(,所以这是不正确的。

您要做的是:

  1. 查找列表中的最大值
  2. 删除具有该值的节点

T biggestValue = head.obj;
// 1
while(act != null) {
if(act.obj.compareTo(biggestValue.obj) > 0) {
biggestValue = act.obj;
}
}
// 2
while(act != null) { // that loop and its body could be simplified by using: while(!act.obj.equals(biggestValue)) but I leave it that way for brevity
if(act.obj.equals(biggestValue)) {
prev.next = act.next;
break;
}
prev = act;
act = act.next;
}

提示:如果单向链表包含多个项目,并且您想切掉包含最大值的节点,则必须使用两个while循环,第一个循环用于识别最大值,第二个循环用于查找包含该最大值的节点并将其从列表中删除。

最新更新