题目
实现反转单向链表和双向链表,要求:如果链表长度为N,时间复杂度为O(N),额外空间复杂度为O(1)
参考答案
图形表示
单向链表
单向反转请参考双向链表
反转前:头节点的前驱是null,尾节点的后继是null。
反转后:以前的头节点的后继是null,以前的尾节点的前驱是null
java代码实现如下:
{
;
;
;
( ) {
. ;
}
}{
([] ) {
();
//构建一个双向链表1 2 3 4
();
();
();
. ;
. ;
. ;
..();
();
();
..();
();
}
//把自己的前驱变后继,把后继变前驱
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;
}
}
}
关键字
链表,单向,双向,反转