定义双链表
private static class DoubleLink{
int data;
DoubleLink pre;
DoubleLink next;
DoubleLink(){
}
DoubleLink(int data){
this.data=data;
}
}
初始化双链表
private static DoubleLink initLink(int [] arr,DoubleLink link){
DoubleLink head=link;
int i=0;
if (head==null) head= new DoubleLink();
int len =getLen(link);
while (i<arr.length){
DoubleLink tmp=new DoubleLink(arr[i]);
head.next=tmp;
tmp.pre=head;
head=head.next;
i++;
}
return link.next;
}
正向打印双链表
private static void printLink(DoubleLink link){
DoubleLink head =link;
int i=0;
while (head!=null){
i++;
System.out.println("第"+i+"个数是"+head.data);
head=head.next;
}
}
反向打印双链表
private static void reversePrintLink(DoubleLink link){
DoubleLink head =link;
int i=getLen(link);
while (head.next!=null){
head=head.next;
}
DoubleLink tail =head;
while (tail.pre!=null){
System.out.println("第"+i+"个数是"+tail.data);
tail=tail.pre;
i--;
}
}
指定插入数据
private static DoubleLink insertDataIndex(DoubleLink link, DoubleLink dataLink,int index){
DoubleLink head =link;
int len =getLen(link);
if(len<1||index>len+1){
System.out.println("原链表不满足条件!");
return link;
}
else if (index==1){
dataLink.next=head;
head.pre=dataLink;
return dataLink;
}
else{
int i=1;
while (i<index-1){
head=head.next;
i++;
}
DoubleLink cur =head.next;
if (cur.next!=null){
cur.pre.next=dataLink;
dataLink.pre=cur.pre.next;
dataLink.next=cur.next.pre;
}
if (cur.next==null){
cur.next=dataLink;
dataLink.pre=cur.next;
dataLink.next=null;
}
}
return link;
}
指定位置删除数据
private static DoubleLink delDataIndex(DoubleLink link, int index){
DoubleLink head =link;
int len =getLen(link);
if(index<1||index>len+1){
System.out.println("指定位置不满足条件!");
return link;
}
else if (index==1){
DoubleLink tmp=new DoubleLink();
tmp.next=head.next;
head.pre=tmp;
return tmp.next;
}
else {
int i=1;
while (i<index-1&&head!=null){
head=head.next;
i++;
}
DoubleLink cur =head.next;
if (cur.next!=null){
cur.pre.next=cur.next;
cur.next.pre=cur.pre;
}
if (cur.next==null)cur.pre.next=null;
return link;
}
}
主函数
public static void main(String[] args) {
DoubleLink link =initLink(new int[]{1, 6, 9, 12},new DoubleLink());
System.out.println("***************正向打印链表为*********************************");
printLink(link);
System.out.println("***************反向打印链表为**********************************");
reversePrintLink(link);
System.out.println("**************指定索引位置添加数据后链表为***********************");
printLink(insertDataIndex(link,new DoubleLink(5),4));
System.out.println("**************指定索引位置删除数据后链表为***********************");
printLink(delDataIndex(link,3));
}
运行结果