我必须为链表类编写一个非常简单的方法,但我遇到了一些问题。此方法称为squish()
,采用此列表,并且在两个或多个连续项目相等的情况下(使用比较equals()
),它会删除重复节点,以便仅保留一个连续副本。因此,该列表中没有两个连续项目在程序完成后是相等的。
执行后squish()
,列表可能会比squish()
开始时短。没有添加额外的项目来弥补那些被删除的项目。
例如,如果输入列表是[ 0 0 0 0 1 1 0 0 0 3 3 3 1 1 0 ]
,则输出列表是[ 0 1 0 3 1 0 ]
。
这是我的方法:
public void squish() {
SListNode current = head;
boolean end =false;
while(end == false )
{
if(!current.item.equals(current.next.item))
current=current.next;
else
{
while(current.item.equals(current.next.item) && current.next !=null)
current.next=current.next.next;
current=current.next;
}
if (current==null)
end=true;
}
}
这是执行代码的一个小主程序。
public class main {
public static void main(String args[])
{
int[] test6 = {6, 6, 6, 6, 6, 3, 6, 3, 6, 3, 3, 3, 3, 3, 3};
SList list6 = new SList();
for (int i = 0; i < test6.length; i++) {
list6.insertEnd(new Integer(test6[i]));
}
System.out.println("squishing " + list6.toString() + ":");
list6.squish();
String result = list6.toString();
System.out.println(result);
int[] test5 = {3, 7, 7, 7, 4, 5, 5, 2, 0, 8, 8, 8, 8, 5};
SList list5 = new SList();
for (int i = 0; i < test5.length; i++) {
list5.insertEnd(new Integer(test5[i]));
}
System.out.println("squishing " + list5.toString() + ":");
list5.squish();
result = list5.toString();
System.out.println(result);
}
}
调试代码我可以看到该方法工作正常..仅在列表末尾他会抛出一个空异常指针。你能帮助我吗?谢谢