java实现双向链表

package project4;


import javax.print.attribute.standard.PrinterMessageFromOperator;
import javax.xml.soap.Node;


interface Link{
void add(Object obj);
boolean remove(int index);
boolean set(int index,Object obj);
Object get(int index);
int contains(Object obj);
void clear();
void printLink();
Object[] toArray();
}
class LinkImpl implements Link{
private Node first;
private Node last;
private int size=0;
private class Node{
Node Ppre;
Node Pnext;
Object obj;
public Node(Node ppre, Node pnext, Object obj) {
super();
Ppre = ppre;
Pnext = pnext;
this.obj = obj;
}
public Object toArray() {
// TODO Auto-generated method stub
return null;
}

}

public Node getFirst() {
return first;
}
public void setFirst(Node first) {
this.first = first;
}
public Node getLast() {
return last;
}
public void setLast(Node last) {
this.last = last;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}


//插入
@SuppressWarnings("null")
public void add(Object obj) {
// TODO Auto-generated method stub
if(this.size==0)
{
Node Pcur=new Node(null, null, obj);
this.first=Pcur;
this.last=Pcur;
this.size++;
}
else {
Node tmp=this.last;
Node Pcur=new Node(tmp, null, obj);
tmp.Pnext=Pcur;
this.last=Pcur;
this.size++;
}
}
@Override
public boolean remove(int index) {
// TODO Auto-generated method stub
if(index<0&&index>this.size-1) {
return false;
}
if(this.size==0)
{
return false;
}
Node Pcur=this.first;
if(this.size==1)
{
this.first=this.last=null;
this.size--;
return true;
}
else if(this.size>1)
{
if(index==0)
{
this.first=Pcur.Pnext;
Pcur.Ppre=Pcur.Pnext=null;
this.size--;
}
else if(index==this.size-1)
{
Node Ptail=this.last;
this.last=this.last.Ppre;
Ptail.Ppre=Ptail.Pnext=null;
this.size--;
}
else {
for(int i=0;i<index;i++)
{
Pcur=Pcur.Pnext;
}
Pcur.Ppre.Pnext=Pcur.Pnext;
Pcur.Pnext.Ppre=Pcur.Ppre;
Pcur.Pnext=Pcur.Ppre=null;
this.size--;
}
return true;
}
return false;
}
@Override
public boolean set(int index, Object obj) {
// TODO Auto-generated method stub
int i=0;
Node Pcur=this.first;
if(index<size-1)
{
for(i=0;i<index;i++)
{
Pcur=Pcur.Pnext;
}
Pcur.obj=obj;
return true;
}
return false;
}
@Override
public Object get(int index) {
// TODO Auto-generated method stub
Node  Pcur=this.first;
if(index>size)
{
return null;
}
else {
for(int i=0;i<index;i++)
{
Pcur=Pcur.Pnext;
}
return Pcur.obj;
}


}
@Override
public int contains(Object obj) {
// TODO Auto-generated method stub
Node Pcur=this.first;
for(int i=0;i<size;i++)
{
if(obj.equals(Pcur.obj))
{
return 1;
}
Pcur=Pcur.Pnext;
}
return 0;
}
@Override
public void clear() {
// TODO Auto-generated method stub
while(size>=2)
{
Node tmp=this.last;
tmp.Ppre.Pnext=null;
this.last=tmp.Ppre;
tmp.Pnext=tmp.Ppre=null;
this.size--;
}
this.first=this.last=null;
}
@Override
public void printLink() {
// TODO Auto-generated method stub
for(Node Pcur=this.first;Pcur!=null;Pcur=Pcur.Pnext)
{
System.out.println(Pcur.obj);
}
}
@Override
public Object[] toArray() {
// TODO Auto-generated method stub
Node Pcur=this.first;
Object []object=new Object[3];
for(int i=0;i<this.size;i++)
{
object[i]=Pcur.obj;
Pcur=Pcur.Pnext;
}
return object;


}
}
public class Test{
public static  void main(String []args)
{
Link link=new LinkImpl();
link.add("火车头");
link.add("车厢1");
link.add("车厢2");



System.out.println(link.remove(0));


for(int i=0;i<link.toArray().length;i++)
{
System.out.println(link.toArray()[i]);
}

}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值