首页 > 其他分享 >链表的头插和尾插(数组--链表)

链表的头插和尾插(数组--链表)

时间:2023-10-16 20:00:13浏览次数:50  
标签:name -- text data 链表 数组 nodes type id

头插法代码示例

public class LinkDemo {
    public static void main(String[] args) {
        //将这个数组按头插的方式插入列表
        int[] arr={1,2,3,4,5,6,7,8,9};
        headIndert(arr);
    }

    public static void headIndert(int[] arr){
        Node link=null;
        for (int i = 0; i < arr.length; i++) {
            Node x=new Node();
            x.value=arr[i];
            x.next=link;
            link=x;
        }
        System.out.println(link);
    }
}
public class Node {
    public int value;
    public Node next;

    public String toString(){
        return "值是:"+value+",下一个节点是:"+next;
    }
}

对应内存图

  • 当i=0,第一次循环

0
  • 第一次循环结束,回收循环体内的变量x

0

  • i=1,第二次循环

0
  • 第二次循环结束,回收循环体内变量x

0

循环两次后当前链表为:

0
  • 接着进行循环,直至到达循环停止条件
  • .........
  • 这个循环在外的变量也相当于头指针,指向链表的第一个节点
 

尾插法代码示例

方法一:把头插的数组反过来遍历就好了,注意数组越界问题
public static void fun(int[] arr){
    Node link=null;
    for (int i = arr.length-1; i >=0 ; i--) {
        Node x=new Node();
        x.value=arr[i];
        x.next=link;
        link=x;
    }
    System.out.println("尾插");
    System.out.println(link);
}
  方法二: 1、定义node节点 2、定义一个cur来遍历单链表。如果过cur.next ! = null,cur就往后遍历,直到遇到null,极为链表尾部,停止遍历。 3、将node节点放到尾节点的最后一个位置,即next域为null; 4、让刚刚cur找到的链表尾部节点与新放的节点连接起来,即cur的next地址域存放node的地址。
//尾插法
public static void addLast(int[] arr){
    ListNode head=null;
    for (int i = 0; i < arr.length; i++) {
        ListNode newnode = new ListNode(arr[i]);
        if (head == null) {
            head = newnode;
        } else {
            ListNode cur = head;
            while (cur.next != null) {
                cur = cur.next;
            }
            cur.next = newnode;
        }
    }
    System.out.println(head);
}
  • 注意遍历单链表的时候,循环条件英高是cur.next != null,而不是cur != null,前者指节点的next域为空,后者指整个节点为空。

标签:name,--,text,data,链表,数组,nodes,type,id
From: https://www.cnblogs.com/nliu/p/17768226.html

相关文章

  • mybatis、mybatis-plus的二级缓存使用
    需求因有些数据查询量很大,很费数据库资源,且每次查询都是不怎么变更的数据,所以需要通过缓存进行减轻数据库压力,继而选择通过myabtis的二级缓存来实现。使用步棸第一步:yml配置需开启mybatis-plus的二级缓存。#MyBatisPlus的配置项mybatis-plus:configuration:#是否......
  • 2D物理引擎 Box2D for javascript Games 第四章 将力作用到刚体上
    2D物理引擎Box2DforjavascriptGames第四章将力作用到刚体上将力作用到刚体上Box2D是一个在力作用下的世界,它可以将力作用于刚体上,从而给我们一个更加真实的模拟。但是,如果你想要移动刚体,发射子弹,抛掷小鸟,驾驶汽车和当你在玩物理游戏时你看到的一切令人起劲的事情,那么你......
  • Linux保持程序后台运行
    nohup命令(nohangup)nohup{someprogram}&&:让程序在后台运行nohup:在当前目录自动生成nohup.out,可以不挂断地运行命令当前用户非正常退出或结束的时候,命令仍然可能自己结束。因此使用了nohup的情况下,退出终端的时候需要使用exit才能保证命令一直在后台运行后台程......
  • 弹弹床(连续段dp)
    题目简述一排格子,每个格子上有“L”或“R”,表示向左或向右跳到任意位置。问从任意位置出发跳完所有的格子在第\(i\)格子结束的方案数。答案对\(10^9+7\)取模。分析&性质考虑一个选取方案,取的位置序列为排列与相对位置有关的信息可以考虑插入顺序最终思路使用连续......
  • socket编程
    1.什么是socket编程socket编程简介:能够唯一标示网络中的进程后,它们就可以利用Socket进行通信了,什么是Socket呢?我们经常把Socket翻译为套接字,Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信基......
  • [COCI2015-2016#4] ENDOR 题解
    [COCI2015-2016#4]ENDOR题解首先要发现一个很重要的性质,那就是两只变色龙碰撞后回头,等效于两只变色龙继续往前走,其中向右走的颜色不变,而向左走的要改变颜色。那这样就有一种\(O(n^2)\)的做法:对于向右的变色龙,直接贡献答案;对于向左的变色龙,我们按照碰到的先后顺序枚举它前面......
  • 求叶子结点个数
    递归求叶子结点个数背#include<stdio.h>#include<stdlib.h>typedefstructnode{intdata;structnode*lchild,*rchild;}TreeNode,*Tree;voidCreateTree(Tree&T)//先序创建二叉树,中序后序创建和递归遍历一样,只修改位置{intx;scanf("......
  • 瀑布模型
            ......
  • Go - Creating a UDP Client
    Problem: YouwanttocreateaUDPclienttosenddatatoaUDPserver.Solution: UsetheDialfunctioninthenetpackagetoconnecttoaUDPserver.ThenusetheWritemethodofthenet.UDPConninterfacetowritedatatotheconnection. CreatingaUDP......
  • AtCoder Beginner Contest 324
    在高铁上加训!A-Same(abc324A)题目大意给定\(n\)个数,问是否都相等。解题思路判断是不是全部数属于第一个数即可。或者直接拿set去重。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_stdio(f......