首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将单双向链表反转?

题目

实现反转单向链表和双向链表,要求:如果链表长度为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;

}

}

}

关键字链表,单向,双向,反转

老规矩,代码截图,免得手机上看代码很不爽

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200507A0ERBE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券