2016-06-20 34 views
1

我已经在Java中实现了一个pop方法我将它用于分隔符匹配,尽管它在列表中留下了一个元素。POP方法链表

public int length(){ 
    Node current = this.head; 
    int length = 0; 
     while(current != null){ 
      current = current.getNextNode(); 
      length += 1; 
     } 
    return length; 
} 

public char pop(){ 
    Node current = this.head; 
    Node lastN = this.last; 

    for(int i = 0; i < length() - 2; i++){ 
     current = current.getNextNode(); 
    } 
    current.setNextNode(null); 
    this.last = current; 

    return lastN.getBracket(); 
} 

如何弹出的第一个元素,如果长度是> = 1?,或用于改善我的代码的任何建议。

回答

0

使用java.util.LinkedList。

addFirst(),addLast(),size(),removeFirst()removeLast()你被覆盖。

或者,您也可以通过其他方式检查此delimiter check example

在你的代码中,你错过了“初始”或“最后一个元素”的情况,这很特殊。您应该检查this.head == this.last的情况;应该返回最后一个元素并清理列表的情况。

+1

是的,但我想为实践目的而做,也是手动做这件事真的很重要,有点让你觉得。 –

+0

只是增加了一个想法。 – manuelvigarcia

+0

您是否检查过“初始”案例想法? – manuelvigarcia

0

为什么要移动循环中的列表元素?如何而不是:

if (this.head != null) 
{ 
    char val = this.head.getBracket(); 
    this.head = this.head.getNextNode(); 
} 

这段代码将删除第一个元素,并设置头指向第二个元素。我猜JVM会删除旧的head。如果列表是循环的,那么也设置last指向新的头部。