Java链表与数组间的相互转换

自定义链表ListNode类

public class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

将链表转换成数组

//将链表转换成数组
public class Test1 {
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        int[] a = {1, 9, 9, 9, 9, 9, 9, 9, 9, 9};
        ListNode l1 = test1.arrayToListNode(a);
        test1.printListNode(l1);

    }

    //数组转换成链表
    public ListNode arrayToListNode(int[] s) {
        ListNode root = new ListNode(s[0]);//生成链表的根节点,并将数组的第一个元素的值赋给链表的根节点
        ListNode other = root;//生成另一个节点,并让other指向root节点,other在此作为一个临时变量,相当于指针
        for (int i = 1; i < s.length; i++) {//由于已给root赋值,所以i从1开始
            ListNode temp = new ListNode(s[i]);//每循环一次生成一个新的节点,并给当前节点赋值
            other.next = temp;//将other的下一个节点指向生成的新的节点
            other = temp;//将other指向最后一个节点(other的下一个节点)  other=other.getNext();
        }
        return root;
    }

    /**
     * 遍历一个链表
     */
    public void printListNode(ListNode l) {
        while (l != null) {
            System.out.print(l.val + " ");
            l = l.next;
        }
    }
}

将数组转换成链表

//将链表转换成数组
public class Test2 {
    public static void main(String[] args) {
        Test2 test2 = new Test2();
        ListNode l1 = new ListNode(0);
        l1.next = new ListNode(1);
        l1.next.next = new ListNode(2);
        l1.next.next.next = new ListNode(3);
        l1.next.next.next.next = new ListNode(4);

        test2.printArrays(test2.listNodeToArray(l1));
    }

    //输出数组
    public void printArrays(int[] ints) {
        for (int x : ints) {
            System.out.print(x + " ");
        }
    }

    //将链表转换成数组
    public int[] listNodeToArray(ListNode l) {
        int size = listNodeSize(l);
        int[] ints = new int[size];
        int index = 0;
        while (l != null) {
            ints[index] = l.val;
            l = l.next;
            index++;
        }
        return ints;
    }

    //求链表的长度
    public int listNodeSize(ListNode l) {
        int size = 0;
        while (l != null) {
            size++;
            l = l.next;
        }
        return size;
    }

    //遍历一个链表
    public void printListNode(ListNode l) {
        while (l != null) {
            System.out.print(l.val + " ");
            l = l.next;
        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,253评论 19 139
  • 在经过一次没有准备的面试后,发现自己虽然写了两年的android代码,基础知识却忘的差不多了。这是程序员的大忌,没...
    猿来如痴阅读 2,909评论 3 10
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,305评论 0 16
  • 1《我的一个道姑朋友》 策划/念白编写:千三毛蟹 原曲:《一番星》 词作:陆菱纱 演唱:Lon 道姑:浮梦若薇 和...
    蹉跎笑我阅读 1,123评论 0 2
  • 「将何去」 ——江城浪子 红日无情照我身, 清风有意伴君行。 仰天长望将何去? 不知浪子一片心。
    江城浪子_阅读 183评论 0 0