Java代码
- packagedatamemory.link;
- //单链表
- publicclassObjectLink
- {
- privateintsize;//链表长度
- privateObjectNodehead;//头节点
- publicvoidadd(Objectobj)
- {
- ObjectNodenode=newObjectNode(obj,null);
- if(head==null)
- {
- head=node;
- }
- else
- {
- ObjectNodetemp=head;
- while(temp.getNext()!=null)
- {
- temp=temp.getNext();//移动到最后的节点
- }
- temp.addNodeAfter(obj);
- size++;//表的长度+1;
- }
- }
- publicintgetSize()
- {
- returnsize;
- }
- publicObjectget(inti)
- {
- if(i>size-1)
- {
- returnnull;
- }
- ObjectNodetemp=head;
- for(intk=0;k<i;k++)
- {
- temp=temp.getNext();
- }
- returntemp;
- }
- publicintindexOf(Objectobj)
- {
- inti=0;
- ObjectNodenode=newObjectNode(obj,null);
- if(head==null)
- return-1;
- if(head.equals(node))
- return0;
- ObjectNodetemp=head;
- while(temp.getNext()!=null)
- {
- i++;
- if(temp.getNext().equals(node))
- {
- returni;
- }
- temp=temp.getNext();
- }
- return-1;
- }
- publicvoidremove(Objectobj)
- {
- ObjectNodenode=newObjectNode(obj,null);
- if(head!=null)
- {
- if(head.equals(node))
- head=head.getNext();//设置第二节点为头节点
- else
- {
- ObjectNodetemp=head;
- while(temp.getNext()!=null)
- {
- if(temp.getNext().equals(node))
- {
- temp.removeNodeAfter();//删除该节点之后的节点
- size--;
- break;
- }
- }
- }
- }
- }
- }
节点类:
- packagedatamemory.link;
- //单链节点
- publicclassObjectNode
- {
- privateObjectdata;
- privateObjectNodenext;
- publicObjectNode(Objectdata,ObjectNodenext)
- {
- super();
- this.data=data;
- this.next=next;
- }
- protectedObjectgetData()
- {
- returndata;
- }
- protectedvoidsetData(Objectdata)
- {
- this.data=data;
- }
- //在改节点之后添加新节点
- publicvoidaddNodeAfter(Objectobj)
- {
- ObjectNodenode=this.next;
- if(node==null)//当改节点是尾节点时,把新加的节点设置为尾节点
- {
- this.next=newObjectNode(obj,null);
- }
- else
- //把该节点设置为下一节点,原先的节点为新节点的下一节点
- {
- this.next=newObjectNode(obj,node);
- }
- }
- publicvoidremoveNodeAfter()
- {
- if(next!=null)
- {
- next=next.next;//设置下一节点为下下个节点
- }
- }
- protectedObjectNodegetNext()
- {
- returnnext;
- }
- protectedvoidsetNext(ObjectNodenext)
- {
- this.next=next;
- }
- publicbooleanequals(Objectobj)
- {
- if(objinstanceofObjectNode)
- {
- ObjectNodenode=(ObjectNode)obj;
- if(node.getData()==this.data)//指向的对象是同一个对象
- {
- returntrue;
- }
- }
- returnfalse;
- }
- }