1.代码
1.将单向链表反向
/**
* 反向设置链表
* @param head 传入要反向的头节点
*/
public void reverseSetList(HeroNode head) {
//判断链表是否可以反向,或没必要反向:null,或者链表长度为1,那么没有必要反向
if (head.next==null||head.next.next==null) {
System.out.println("链表长度为null或者长度为1,没有必要反向");
return;
}
//长度可以反向
//用来反向的辅助头节点
HeroNode reverseHead=new HeroNode(0,"","");
//当前节点
HeroNode cur = head.next;
//当前节点的下一个节点,为了不断链
HeroNode curNext = null;
//遍历队列
while (cur != null) {
curNext=cur.next;//为当前节点的下一个节点赋值,目的是保证链表不断裂
cur.next=reverseHead.next;//当前节点的下一个指向赋值头节点的下一个
reverseHead.next=cur;//为赋值节点的下一个赋值
cur=curNext;//当前节点后移
}
head.next=reverseHead.next;//最后头节点指向反向节点的next
}
2.全部代码:
package com.example.lib5.linkedList;
public class SingleLinkedListDemo {
public static void main(String[] args) {
//进行测试
//先创建节点
HeroNode heroNode = new HeroNode(1, "唐三", "昊天宗");
HeroNode heroNode1 = new HeroNode(2, "小舞", "十万年魂兽");
HeroNode heroNode2 = new HeroNode(3, "宁荣荣", "七宝琉璃宗");
HeroNode heroNode3 = new HeroNode(4, "千仞雪", "武魂殿");
//创建链表,并加入节点
MyLinkedList myLinkedList = new MyLinkedList();
// myLinkedList.add(heroNode);
// myLinkedList.add(heroNode3);
// myLinkedList.add(heroNode1);
// myLinkedList.add(heroNode2);
//根据顺序来加入节点
myLinkedList.addByOrder2(heroNode);
myLinkedList.addByOrder2(heroNode3);
myLinkedList.addByOrder2(heroNode1);
myLinkedList.addByOrder2(heroNode2);
// myLinkedList.addByOrder2(heroNode2);
// //遍历节点
myLinkedList.list();
HeroNode heroNodeNew = new HeroNode(3, "海女斗罗", "海神岛");
myLinkedList.update(heroNodeNew);
myLinkedList.list();
//对链表进行删除
// myLinkedList.delete(3);
myLinkedList.list();
/**
* 面试题
*/

这篇博客展示了如何使用Java实现单向链表的反转,包括判断链表是否需要反转、反向辅助节点的使用以及核心反转逻辑。此外,还提供了链表的增删改查操作,如按顺序插入、更新节点、删除节点等。最后,博客还涵盖了获取链表长度、查找倒数第几个节点以及腾讯面试题中的链表反转问题。
最低0.47元/天 解锁文章
5368

被折叠的 条评论
为什么被折叠?



