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();
}