当前位置: 代码迷 >> J2SE >> 关于模拟LinkedList中的remove步骤
  详细解决方案

关于模拟LinkedList中的remove步骤

热度:84   发布时间:2016-04-24 00:34:33.0
关于模拟LinkedList中的remove方法
老师让我们模拟下LinkedList中的remove方法小弟想了半天才想出来这么个办法,可是这个办法只能删除头结点和尾结点,中间的没反映。
小弟的思路是将删除元素分成三种情况:1.删除的是头结点 那么就将head=第二个结点,然后将原来的头结点的引用变为null
  2.删除尾结点 那么就将最后个元素的引用变为null 3.删除中间部分的,先用一个Node变量 nn记录住我传入的索引的元素中的引用 Node nn=temp; 然后将temp=nn.next; 最后将nn的引用变为null
具体代码如下
Java code
class Node {        Object data;  //数据元素     Node next;  //指向下一个节点        public Object getData() {        return data;    }    public void setData(Object data) {        this.data = data;    }    public Node getNext() {        return next;    }    public void setNext(Node next) {        this.next = next;    }}class LinkList {         Node head;  //头节点    private int len;    public LinkList(){        len=0;    }        public LinkList(Node node){        this.head=node;        len=0;    }            public void add(Node node){        if(head==null){            head=node;            len++;        }        else{            Node temp=head;            while(temp.next!=null){                temp=temp.next;            }            temp.next=node;            len++;        }    }    public void remove(int index){        System.out.println(len);        if(index>=len||index<0){            throw new ArrayIndexOutOfBoundsException();        }                        Node temp=head;            while(temp.next!=null){                            temp=temp.next;                            if(index==0){//0表示第一个元素.                    System.out.println("删除第一个");                    Node n=head;                    head=n.next;                    n=null;                    break;                }else if(index==len-1){                    System.out.println("删除最后");                    temp.next=null;                    break;                }else{                    System.out.println("删除中间");                    Node nn=temp;                    temp=nn.next;                    nn=null;                    break;                }            }        }public void display(){        Node temp=head;        while(temp!=null){            System.out.println(temp);            temp=temp.next;        }    }}class Test {    public static void main(String[] args) {        LinkList link=new LinkList();            Node n1=new Node();        link.add(n1);        Node n2=new Node();        link.add(n2);        Node n3=new Node();        link.add(n3);                link.remove(1);//删除第二个元素,0表示第一个.                System.out.println(n1);        System.out.println(n2);        System.out.println(n3);        System.out.println("------------------------------------");                link.display();    }}


------解决方案--------------------

------解决方案--------------------
大概看了一下,删除的时候,你else{相当于不满足首尾删除两种就执行,然后就break了,根本就不是删除你的index目标节点,所以改成

Java code
Node temp=head;int current = 0;while(temp.next!=null){   ...//代码不变   else if (current==index){ //循环到目标节点才执行        ...//代码不变    }    current++; //节点位置+1}
  相关解决方案