数组转成链表(正序,逆序)

给定数组:[1,2,3,4,5,6,7,8].转成链表结构

第一种方法,正序循环数组:

1.设置哨兵节点
在这里插入图片描述
2. 把哨兵节点sentineNode赋值给一个临时节点tempNode.循环数据1 进来的时候,建立一个新的节点newNode,赋值为1.

在这里插入图片描述
3. 需要注意的是,哨兵节点sentineNode现在是整个链表的head节点.然后我们把临时节点指向newNode.
在这里插入图片描述我们遵循上面的步骤即可。

代码如下:

    @Data
    public class Node {
        int val;
        Node next;
       public  Node(int x) { val = x; }
    }
public Node changeArrayToNode(int[] arr) {
        if(arr == null || arr.length <= 0){return null;}

        Node sentineNode = new Node(0);  //建立哨兵节点
        Node tempNode = sentineNode;  //tempNode变量指向哨兵节点
        for(int i = 0; i < arr.length; i++) {
            Node newNode = new Node(arr[i]);
            tempNode.next = newNode;    //临时节点‘后继指针’指向新节点
            tempNode = newNode;        //把新节点赋给临时变量tempNode
        }
        return sentineNode.next;
    }

时间复杂度与空间复杂度都是O(n)

第二种方法:逆序遍历数组,从链表的未节点开始赋值

逆序遍历和正序遍历原理是一样的,这里加深理解。

在这里插入图片描述
逆序遍历进来第一个值是8,我们创建一个新节点NewNode,并且让headNode变量指向NewNode; 进来第一个数据7的时候,我们把7的newNode节点的‘后继指针’指向刚才的headNode节点。然后再把headNode变量指向7的newNode节点。依次循环。

代码如下:

public Node changeArrayToNode2(int[] arr) {
        if(arr == null || arr.length <= 0){return null;}

        Node headNode = null;
        for(int i = arr.length - 1; i >= 0; i--) {
            Node newNode = new Node(arr[i]);
            newNode.next = headNode;
            headNode = newNode;
        }
        return headNode;
    }

总之,我们在链表问题的时候,要多想一下临时节点与哨兵节点。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值