题目
实现反转单向链表和双向链表,要求:如果链表长度为N,时间复杂度为O(N),额外空间复杂度为O(1)参考答案图形表示单向链表
单向反转请参考
双向链表
反转前:头节点的前驱是null,尾节点的后继是null。
反转后:以前的头节点的后继是null,以前的尾节点的前驱是null
java代码实现如下:
//双向链表节点
publicclassDoubleNode{
publicintvalue;
//前驱
publicDoubleNodepre;
//后继
publicDoubleNodenext;
publicDoubleNode(intvalue) {
this.value=value;
}
}
publicclassDoubleNodeReversal{
publicstaticvoidmain(String[]args) {
DoubleNodehead=newDoubleNode(1);
//构建一个双向链表1 2 3 4
DoubleNodemid1=newDoubleNode(2);
DoubleNodemid2=newDoubleNode(3);
DoubleNodetail=newDoubleNode(4);
head.next=mid1;
mid1.next=mid2;
mid2.next=tail;
System.out.println("反转前");
print(head);
head=reversalList(head);
System.out.println("反转后");
print(head);
}
//把自己的前驱变后继,把后继变前驱
privatestaticDoubleNodereversalList(DoubleNodehead) {
DoubleNodepre=null;
DoubleNodenext;
while(head!=null) {
next=head.next;
head.next=pre;
head.pre=next;
pre=head;
head=next;
}
System.out.println();
returnpre;
}
//遍历打印节点信息
privatestaticvoidprint(DoubleNodehead) {
while(head!=null) {
System.out.print(head.value);
//优化打印日格式
System.out.print(" ");
head=head.next;
}
}
}
关键字链表,单向,双向,反转
老规矩,代码截图,免得手机上看代码很不爽
领取专属 10元无门槛券
私享最新 技术干货