四、数据结构与算法 (四)单向链表面试:将链表顺序倒过来

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

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();
        /**
         * 面试题
         */
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值