思路:定義四個結點,前結點prenode,當前結點node,下一個結點nextnode,刪除結點delnode,在遇到刪除結點時候要保證prenode串連上nextnode,防止斷裂情況。
public static void deleteDuplication(ListNote root){ if(root==null){ return; } ListNote preNode=null;//前結點 ListNote node=root;//當前結點 while(node!=null){ ListNote nextNode=node.getNext();//下一個結點 boolean needDelete=false;//判斷當前結點和下一個結點值是否相等 if(nextNode!=null&&nextNode.getValue()==node.getValue()) needDelete=true; if(!needDelete){//不相等,向前移動 preNode=node; node=node.getNext(); } else{//相等,刪除該結點 int value=node.getValue(); ListNote toBeDel=node; while(toBeDel!=null&&toBeDel.getValue()==value){ nextNode=toBeDel.getNext();//刪除該結點 toBeDel=nextNode; } if(preNode==null){//頭結點刪除時 root=nextNode; } else{ //即刪除了重複結點 preNode.setNext(nextNode); } node=nextNode; } } }
定義單向鏈表ListNote
public class ListNote { private ListNote NextNote; private int value; public ListNote(){ } public ListNote(int value){ this.value=value; } public ListNote getNext(){ return NextNote; } public void setNext(ListNote next){ this.NextNote=next; } public int getValue(){ return value; } public void setValue(int value){ this.value=value; }}