我必須爲鏈表列類編寫一個非常簡單的方法,但我遇到了一些問題。此方法稱爲squish()
,它取得此列表,並且在連續兩個或多個項目 相等(使用equals()
進行比較)的任何位置,它將刪除重複節點,以便只保留一個連續副本。因此,在該程序完成後,該列表中沒有兩個連續項目是相等的。java中的鏈接列表
執行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);
}
}
調試代碼我可以看到該方法工作正常..只在列表的末尾,他trhows空異常指針。你可以幫我嗎?感謝
你可以發佈'NullPointerException'的堆棧跟蹤嗎?你知道它在被拋出什麼路線嗎? – andersschuller
這裏是::異常在線程 「主」 顯示java.lang.NullPointerException \t在SList.squish(SList.java:128) \t在main.main(main.java:14),該行是「\t \t \t while(current.item.equals(current.next.item)&& current.next!= null)「 –