Java 没有最后一个节点的LinkedList的实现

Java 没有最后一个节点的LinkedList的实现,java,data-structures,linked-list,Java,Data Structures,Linked List,我被要求在不使用尾部的情况下重新实现一个链表。所以我必须改变它的方法,这样它就可以在不使用尾部节点的情况下工作 removeLast方法把我弄糊涂了:下面是我试图做的,但它没有删除节点 我的尝试有什么问题 public E removeLast() { if(isEmpty()) return null; Node<E> temp=head; while (temp.getNext()!=null) { temp=temp.getNext()

我被要求在不使用尾部的情况下重新实现一个链表。所以我必须改变它的方法,这样它就可以在不使用尾部节点的情况下工作

removeLast
方法把我弄糊涂了:下面是我试图做的,但它没有删除节点

我的尝试有什么问题

public E removeLast()
{
    if(isEmpty()) return null;
    Node<E> temp=head;

    while (temp.getNext()!=null) {
        temp=temp.getNext();
    }
    E a=temp.getData();
    temp=null;
    size--;
    // if(head==temp)
    if (head.getNext()==null)
        head=null;

    return a;
}   
public E removeLast()
{
if(isEmpty())返回null;
节点温度=头;
while(temp.getNext()!=null){
temp=temp.getNext();
}
ea=临时获取数据();
温度=零;
大小--;
//如果(压头==温度)
if(head.getNext()==null)
head=null;
返回a;
}   
测试班

public static void main(String arg[]) {
    LinkedListWm<Integer> r = new LinkedListWm<>();
    r.addFirst(1);
    r.addFirst(3);
    r.addFirst(7);
    r.addFirst(50);
    r.addLast(5);
    System.out.println(r.last());
    System.out.println(r.first());
    r.removeLast();
    System.out.println(r.last());
    r.removeFirst();
    r.display();
}
publicstaticvoidmain(字符串arg[]){
LinkedListWm r=新LinkedListWm();
r、 第一(1);
r、 第一(3);
r、 第一(7);
r、 第一名(50);
r、 addLast(5);
System.out.println(r.last());
System.out.println(r.first());
r、 removeLast();
System.out.println(r.last());
r、 移除第一个();
r、 显示();
}

您需要跟踪
temp
之前的节点。您需要它将其
next
属性设置为null,从而在前面的节点结束列表

目前,您尝试通过以下方式实现:

temp = null;
…但这只是清除变量
temp
的内容。它不会改变列表。为此,必须更改
next
属性

因此,定义一个
prev
变量,该变量将在
temp
之后跟随:

Node<E> prev = null;

while (temp.getNext()!=null) {
    prev = temp;
    temp = temp.getNext();
}
做:

当然,后者只能在
prev
不为空时发生,或者换句话说,当
head
不是最后一个节点时(即
temp

综上所述:

public E removeLast()
{
    if (isEmpty()) return null;
    Node<E> prev = null;
    Node<E> temp = head;
    
    while (temp.getNext() != null) {
        prev = temp;
        temp = temp.getNext();
    }
    
    size--;
    if (prev == null)
        head = null;
    else
        prev.next = null;
        
    return temp.getData();
}
public E removeLast()
{
if(isEmpty())返回null;
Node prev=null;
节点温度=头;
while(temp.getNext()!=null){
prev=温度;
temp=temp.getNext();
}
大小--;
if(prev==null)
head=null;
其他的
prev.next=null;
返回temp.getData();
}

是家庭作业吗?请不要在StackOverflow中这样做。
prev.next = null;
public E removeLast()
{
    if (isEmpty()) return null;
    Node<E> prev = null;
    Node<E> temp = head;
    
    while (temp.getNext() != null) {
        prev = temp;
        temp = temp.getNext();
    }
    
    size--;
    if (prev == null)
        head = null;
    else
        prev.next = null;
        
    return temp.getData();
}