如何通过数组或字符串直观地创建链表

本文介绍了如何在Java中通过int数组和不同格式的字符串直观地创建链表。提供了两个方法,一个用于从数组构建链表,另一个能处理各种形式的字符串。通过这些方法,可以更高效地创建和测试链表,避免手动操作打断做题思路。
摘要由CSDN通过智能技术生成

在前段时间集中做了leetcode上树的相关的题目之后,最近准备做链表相关的题目了。与之前的问题相同,如果每次测试代码的时候,自己创建测试用例,或者调用leetcode给的例子,都要手动去创建一个链表的话,效率未免太低,也会打断做题时候的思路,因此,也整理出了一个用来创建链表的代码,贴出来以供参考。

相关文章

这里有可以参考的创建和直观展示一棵树的方法:
如何直观地打印一棵树
如何直观地创建一棵树

然后是可以直观地打印出一棵树的代码,在本文中也会用到(为方便读者使用,已经将这些代码集成在本文的代码中了,共同作为工具类的方法):
如何直观地打印一个链表

如何创建一个链表

由int数组创建链表

首先,我们先写一个方法,来实现最简单的,由一个给定的数组来创建一个链表:

// 通过数组来构建链表
    public static ListNode constructList(int[] nums) {
   
        ListNode dummy = new ListNode(-1);
        ListNode preNode = dummy;
        for (int i = 0; i < nums.length; i ++) {
   
            ListNode currNode = new ListNode(nums[i]);
            preNode.next = currNode;
            preNode = preNode.next;
        }
        return dummy.next;
    }

在这个方法中,我们只需要遍历输入的数组,然后根据各个元素创建链表的节点的对象,然后把各个对象链接起来即可。这里用了一个小技巧,就是使用了一个dummy作为链表的起始节点,这样的目的是,使后面所有节点的操作完全相同,否则链表中的第一个节点的操作肯定是与其它节点不同的,这样可以减少冗余代码,提高效率(不同多次判断是否为头节点),并且即使为空,输出的方法也不会改变。

由字符串创建链表

在上面一节,我们有了通过int数组得到了链表的方法,但是实际中更常见的情况是,要通过从网页上复制下来的字符串来构建链表,而字符串又有多种形式,如:

"1->2->3->4->5->NULL"
"[1, 2, 3, 4 ,5]"

有的是用箭头来表示,有的是用一个数组的形式(的字符串)来表示,有的带NULL,有的不带,有的用空格隔开,有的没有,因此,仅仅有上面的由整型数组构建链表的方法远远不够,我们需要一个能够适配更多种形式的字符串的方法才能应对这些情况。

但是,因为我们有了上面的这个方法,因此,可以用统一的思路,即先将字符串处理成整型数组,再调用上面的constructList(int[] nums)来得到链表。

在这里,对于多种字符串的形式做了适配,具体如下:

- 允许的字符串形式:
    "1->2->3->4->5->NULL"
    "1->2->3->4->5"
    "[1, 2, 3, 4 ,5]"
    "[1, 2, 3, 4 ,5, NULL]"
- 注意:
    1)字符串前后可以有空格
    2)NULL为大写或小写均可

在下面,将最后的代码贴了出来:

// ListOperation.java
public class ListOperation {
   
    // 直观地打印出链表
    public static void show(ListNode head) 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值