美文网首页
单链表创建以及反转

单链表创建以及反转

作者: 会飞的蜗牛F | 来源:发表于2020-10-16 15:49 被阅读0次

    头插法逻辑图(重点)

    image.png

    节点类

    package listnode;
    
    /**
     * 创建链表类
     */
    public class ListNode{
        //链表的节点对象
        private int data;
        //存储下一个链表节点地址的属性
        private ListNode next;
    
        public ListNode(int data) {
            this.data = data;
        }
    
        public ListNode() {
        }
    
        public int getData() {
            return data;
        }
    
        public void setData(int data) {
            this.data = data;
        }
    
        public ListNode getNext() {
            return next;
        }
    
        public void setNext(ListNode next) {
            this.next = next;
        }
    
        /**
         *   功能:创建一个链表,并返回头节点的地址
         * @param len 创建链表数据的长度
         * @return  返回头节点的地址
         */
        public ListNode create(int len){
            //初始化头节点,不带数据
            ListNode header=new ListNode(-1);
            header.next =null;
            //生成指定长度的随机数
            for (int i = 0; i <len ; i++) {
                //创建随机数
                int num=i+1;
                //创建一个节点对象
                ListNode temp=new ListNode();
                //存储数据
                temp.data=num;
                //是否第一次创建链表节点
                temp.next=header.next;
                header.next=temp;
            }
            return header;
        }
        /**
         * 遍历整个链表
         * @param header 链表中第一个节点的地址
         */
        public void show(ListNode header){
            while(header!=null){
                System.out.print(header.data+"->");
                //遍历下一个节点
                header=header.next;
            }
            System.out.println();
        }
    
        /**
         * 单链表头插法反转
         * @param listNode
         * @return
         */
        public  ListNode reverseList(ListNode listNode){
            //定义一个带头节点的
            ListNode phead = new ListNode(-1);
            //循环节点
            ListNode p = listNode;
            while(p!= null){
                //保存插入点之后的数据
                ListNode tempList = p.next;
                p.next = phead.next;//(参照头插法图)
                phead.next = p;
                p = tempList;
                show(phead);//输出每次的结果
            }
            return phead.next;
        }
    }
    
    

    main 函数

    /**
     * @Description TODO
     * @Author feng
     * @Date 2020/10/16 15:42
     */
    public class Main {
        public static void main(String[] args) {
            //创建链表对象
            ListNode listNode=new ListNode();
            //创建一个链表,并返回第一个节点的地址
            ListNode header=listNode.create(4);
            //遍历创建的链表,输出为0->4->3->2->1,因为事头插法,所以4在前面,0是头节点默认int值
            listNode.show(header.getNext());
            System.out.println("反转后");
            ListNode reverseNode = listNode.reverseList(header.getNext());
            listNode.show(reverseNode);
        }
    }
    

    输出效果:


    image.png

    相关文章

      网友评论

          本文标题:单链表创建以及反转

          本文链接:https://www.haomeiwen.com/subject/tegzpktx.html