删除链表中重复的结点JAVA

来源:互联网 发布:字模软件 编辑:程序博客网 时间:2024/06/09 18:18

思路:定义四个结点,前结点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;    }}
0 0
原创粉丝点击