zoukankan      html  css  js  c++  java
  • 逆序链表

    public class Main {
        public static void main(String[] args){
            int[] array = {1,2,3,4,5};
            Main main = new Main();
            Node root = main.initLinkList(array);//根据array生成链表
            //遍历链表,看一下顺序
    //        while (root != null){
    //            System.out.print(root.val + ",");
    //            root = root.next;
    //        }
    //
    //        System.out.println();
    
            Node r = main.reverse(root);//将上一步生成的链表逆序
            //遍历逆序链表,看一下顺序是否倒了过来
            while (r != null){
                System.out.print(r.val + ",");
                r = r.next;
            }
        }
        //链表逆序,头插法
        public Node reverse(Node src){//src是当前需要逆序链表的第一个节点
            Node head = null;//代表逆序部分的第一个节点
            Node current = null;//用来临时存储低当前正要逆序的节点
    
            while (src != null){
                current = src;//用current来保存src节点,也就是接下来需要逆序的那个节点
                src = current.next;//遍历链表,看一下顺序.next;//将src指向current的下一个,也就是它自己的下一个。也可写成src = src.next
                current.next = head;//将当前需要逆序的节点的下一个指向已经逆序好了的链表的第一个节点。(头插法就是在前面插入新节点)
                head = current;//重新给head设置值,使指向已经逆序部分的第一个,current.next = head这句代码已经将已逆序链表的第一个改变了
            }
    
            return head;//返回逆序链表的第一个
        }
        /**
         * 根据数组建立链表,尾插法。
         * */
        public Node initLinkList(int[] array){
            //root代表生成链表的第一个(可由第一个遍历整个链表)。
            //在生成链表的时候要在链表的最后添加新节点,也就是在current上操作,但是要返回链表第一个,所以用root来保存第一个用于返回
            Node root = null;
            Node current = null;//代表生成链表时正在处理的节点
            if(array != null && array.length > 0){
                for(int i = 0; i < array.length; i ++){
                    Node node = new Node(array[i]);
                    if(root != null){//如果不是数组的第一个,处理如下
                        current.next = node;
                        current = node;
                    }else{//如果是数组的第一个,将
                        root = current = node;
                    }
                }
            }
            return root;
        }
    }
    //定义为节点,就是链表中的节点。val代表存储的值,next代表下一个
    class Node{
        public int val;
        public Node next;
        public Node(int val){
            this.val = val;
        }
    }
  • 相关阅读:
    LeetCode对撞指针汇总
    167. Two Sum II
    215. Kth Largest Element in an Array
    2018Action Recognition from Skeleton Data via Analogical Generalization over Qualitative Representations
    题解 Educational Codeforces Round 84 (Rated for Div. 2) (CF1327)
    题解 JZPKIL
    题解 八省联考2018 / 九省联考2018
    题解 六省联考2017
    题解 Codeforces Round #621 (Div. 1 + Div. 2) (CF1307)
    题解Codeforces Round #620 (Div. 2)
  • 原文地址:https://www.cnblogs.com/worsun/p/7356972.html
Copyright © 2011-2022 走看看