zoukankan      html  css  js  c++  java
  • 单链表(面试题)

    链表反转思路:

     1.单链表中有效节点的个数

    2.查找单链表中弟第k个节点

    3.单链表的反转

    实现代码如下:

    public class TestLink {
    
        public static void main(String[] args) {
            //先创建节点
            HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
            HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
            HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
            HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
            //创建链表
            SingleLinkedList list = new SingleLinkedList();
            list.addByOrder(hero1);
            list.addByOrder(hero4);
            list.addByOrder(hero3);
            list.addByOrder(hero2);
            /*int aa = TestLink.count(list.getHead());
            System.out.println(aa);
            HeroNode hero5 = TestLink.findHeroNode(list.getHead(),2);
            System.out.println(hero5.toString());*/
            TestLink.reverse(list.getHead());
            list.list();
        }
        
        //1单链表中有效节点的个数
        //--遍历得出个数
        public static int count(HeroNode head){
            if(head.next==null){
                return 0;
            }
            int count = 0;
            while(true){
                head = head.next;
                count++;
                if(head.next==null){
                    break;
                }
            }
            return count;
        }
        //2.查找单链表中弟第k个节点
        //--先找到总长度
        //--然后算出在第几个 遍历
        public static HeroNode findHeroNode(HeroNode head,int k){
            if(head.next==null){
                return null;
            }
            int size = count(head);
            if(size<k||k<=0){
                return null;
            }
            int index = 0;
            while(true){
                head = head.next;
                if(index==(size-k)){
                    break;
                }
                index++;
            }
            return head;
        }
        //3.单链表的反转
        //--创建一个新的头部
        //--循环列表 逐步把遍历到的插入新的头部后面
        //--把原来的头部 指向新的队列
        public static void reverse(HeroNode head){
            if(head.next==null){
                System.out.println("链表为空");
                return;
            }
            HeroNode rever = new HeroNode(0, "", "");
            HeroNode next = null;
            HeroNode cru = head.next;
            while(cru!=null){
                next = cru.next;
                cru.next = rever.next;
                rever.next=cru;
                cru=next;
            }
            head.next = rever.next;
        }
        
    
    }
  • 相关阅读:
    FTDI端口或ISP端口编程方式的比较
    PhantomX Pincher Arm---设置ArbotiX和Arduino软件
    PhantomX Pincher机器人机械臂那些事儿
    使用aplay实现音频播放
    TurtleBot3-讲在前面的话
    ROS-ROS命令(五) rosservice:ROS服务
    ROS-ROS命令(四)rostopic: ROS话题
    ROS-ROS命令(三)ROS 信息命令
    jquery下拉框应用
    jquery的attr获取表单checked 布尔值问题
  • 原文地址:https://www.cnblogs.com/cai170221/p/13437180.html
Copyright © 2011-2022 走看看