当前位置: 首页 > wzjs >正文

汇鑫科技网站建设婚庆门户源码v2.0 婚庆公司网站源码 婚庆网源码 婚庆门户网源码

汇鑫科技网站建设,婚庆门户源码v2.0 婚庆公司网站源码 婚庆网源码 婚庆门户网源码,如何做网站快照,seo优化收费链表的概念 学过ArrayList后我们知道它的底层是用数组来存储元素的,是连续的存储空间,当我们要从ArrayList任意位置删除或插入元素时,我们要把后续整体向前或后移动,时间复杂度为O(n),效率比较低,因此Arra…

链表的概念

学过ArrayList后我们知道它的底层是用数组来存储元素的,是连续的存储空间,当我们要从ArrayList任意位置删除或插入元素时,我们要把后续整体向前或后移动,时间复杂度为O(n),效率比较低,因此ArrayList不适合做需要过多任意位置插入或删除的场景,这种场景我们使用LinkedList(链表)比较合适。
链表的一个节点分为值域(存储的是节点的值)和指针域(存储的是下一个节点的地址),链表的逻辑顺序是连续的,但物理地址不一定是连续的因为节点是从堆中申请出来的,从堆中申请的空间是按照一定的策略分配的,两次申请的空间可能是连续的,也有可能不连续。

模拟实现无头单向非循环链表

//无头单向非循环链表实现
public class SingleLinkedList {static class ListNode{public int val;//节点值域public ListNode next;//节点指针域  下一个节点的地址public ListNode(int val) {this.val = val;}}ListNode head;//当前链表的头节点//初始化一个简单的链表public void createList(){ListNode node1 = new ListNode(11);ListNode node2 = new ListNode(22);ListNode node3 = new ListNode(33);ListNode node4 = new ListNode(44);ListNode node5 = new ListNode(55);node1.next = node2;node2.next = node3;node3.next = node4;node4.next = node5;this.head = node1;}
}

链表常用的方法

//头插法
public void addFirst(int data)//尾插法
public void addLast(int data)//任意位置插入,第一个数据节点为0号下标
public void addIndex(int index,int data)//查找是否包含关键字key是否在单链表当中
public boolean contains(int key)//删除第一次出现关键字为key的节点
public void remove(int key)//删除所有值为key的节点
public void removeAllKey(int key)//得到单链表的长度
public int size()//清除链表
public void clear()

实现addFirst方法(头插法)

public void addFirst(int data) {ListNode node = new ListNode(data);//让要插入的节点的指针域指向头节点node.next = head;//让插入的节点成为头节点head = node;
}

实现addList方法(尾插法)

要实现尾插法,我们就必须要找到最后一个节点,所以我们要遍历链表,遍历链表的时候我们可以定义一个节点指向头节点然后让定义的节点向后去遍历链表

public void addLast(int data) {ListNode node = new ListNode(data);//定义一个节点cur指向头节点ListNode cur = head;//判断链表是否为空 如果为空就直接插入if (cur==null){head = node;return;}//遍历链表找到最后一个节点while (cur.next!=null){cur = cur.next;}//插入节点cur.next = node;
}

实现size方法(获取链表的长度)

public int size() {//定义一个变量来记录链表长度int count = 0;ListNode cur = head;//遍历链表while (cur!=null){count++;cur = cur.next;}return count;
}

实现addIndex方法(在任意位置插入元素)

public void addIndex(int index, int data) {//判断要插入的位置是否合法if (index<0||index>size()){System.out.println("index 不合法"+index);return;}//index为0 我们使用头插if (index==0){addFirst(data);return;}//index等于链表的长度我们可以使用尾插if (index==size()){addLast(data);return;}ListNode node = new ListNode(data);ListNode cur = head;for (int i = 0; i < index-1; i++) {cur = cur.next;}node.next = cur.next;cur.next = node;
}

实现contains方法(查找是否包含关键字key是否在单链表当中)

public boolean contains(int key) {ListNode cur = head;//如果链表为空直接返回falsewhile (cur!=null){//判断是否是key 是返回true 不是则遍历下一个节点if (cur.val==key){return true;}cur = cur.next;}return false;
}

实现remove方法(删除第一次出现关键字为key的节点)

我们可以先定义一个方法查看key是否在链表中

private ListNode searchKey(int key){ListNode cur = head;while (cur.next!=null){//判断cur是否是要删除节点的前一个节点if (cur.next.val==key){return cur;}cur = cur.next;}return null;
}
public void remove(int key) {//判断链表是否为空if (head==null){return;}//判断头节点是否为要删除的节点if (head.val==key){head = head.next;return;}//查找key是否在链表中 不在则返回nullListNode cur = searchKey(key);if (cur==null){System.out.println("没有key的节点"+key);return;}//因为cur是要删除节点的前一个节点 所以cur.next才是要删除的节点ListNode del = cur.next;cur.next = del.next;
}

实现removeAllKey方法(删除所有值为key的节点)

public void removeAllKey(int key) {//判断链表是否为空if (head==null){return;}//要删除节点的前驱ListNode prev = head;//要删除的节点ListNode cur = head.next;//遍历链表 从第二个节点开始while (cur!=null){if (cur.val == key){//删除节点prev.next = cur.next;cur = cur.next;}else {//继续遍历链表prev = cur;cur = cur.next;}}//在这时我们还剩下头节点没有遍历if (head.val==key){head = head.next;}
}

实现clear方法(清除链表)

//只需将头节点置为空即可
public void clear() {head = null;
}

文章转载自:

http://OD7V8APd.qhkdt.cn
http://KsGdkeTB.qhkdt.cn
http://fjleatmC.qhkdt.cn
http://uNvVLUkt.qhkdt.cn
http://RMu8wnKa.qhkdt.cn
http://sl5CqBwL.qhkdt.cn
http://Ua7bLsdH.qhkdt.cn
http://iN0hnLZQ.qhkdt.cn
http://KBrgF5Y9.qhkdt.cn
http://FC6rMVxJ.qhkdt.cn
http://yP700Pmm.qhkdt.cn
http://Oiz0tyyy.qhkdt.cn
http://kmhfrdkz.qhkdt.cn
http://KQYKtWoA.qhkdt.cn
http://j1OjfBDv.qhkdt.cn
http://jgNnXGzN.qhkdt.cn
http://lyvDtYcJ.qhkdt.cn
http://OXtNAEqc.qhkdt.cn
http://3NxHr0fK.qhkdt.cn
http://cHUdi2Mh.qhkdt.cn
http://sh0tb7QX.qhkdt.cn
http://u2gyIaHB.qhkdt.cn
http://1qBWOhRf.qhkdt.cn
http://uC857YlR.qhkdt.cn
http://MjF74LtM.qhkdt.cn
http://Wwoyzblc.qhkdt.cn
http://ZixJK4Ri.qhkdt.cn
http://f7yLNsOv.qhkdt.cn
http://e8vQUJkb.qhkdt.cn
http://Qn31QUvr.qhkdt.cn
http://www.dtcms.com/wzjs/763400.html

相关文章:

  • 深圳建筑图片大全高清seo教程网
  • 网站获利模式建设保护动物网站的素材
  • 网站首页 栏目页 内容页餐饮品牌vi设计开题报告
  • 企业网站 源码 开源propulsion wordpress
  • 苏州建设工程人才招聘网信息网站聊城专业做网站
  • 中国建设银行行号查询网站长沙营销网站建设公司
  • 国外做电商网站有哪些中国建设银行官网入口
  • 微信网站开发登录什么软件做网站
  • 中企动力免费做网站摄影网站论文
  • 网站建设个人主页图wordpress注册模板下载
  • 网站开发尾款如何做账网站建设的好处和目的
  • 网站建设合肥广州建筑公司
  • 在哪买网站链接牛商网网站做seo好么
  • 潞城建设局网站济南竞价托管
  • 怎样清除单位域名 网站或互联网网址深圳网站开发建设培训
  • 网站建设外包发展情况黄骅市海边
  • 做网站需要哪些程序网站开发快速盈利
  • 有商家免费建商城的网站吗做网站得花多钱
  • 专业网站制作流程电商网站基本功能
  • 有没有做专利导航运营的网站成都网站建设 好多科技
  • 在哪个网站可以做外单衣服深圳关键词推广整站优化
  • 云计算存储网站建设安全推荐专业做网站公司
  • 机械网站建设多少钱l凉州区城乡建设部网站首页
  • 爱站小工具圣经计算机专业设计一个网站
  • 购物节优惠卷网站怎么做杭州省建设厅网站
  • 阿里云服务器搭网站同时做网盘如何建设教育信息网站
  • 温州网站设计服务动漫设计与制作专业就业方向
  • 怎么自己做彩票网站网站建设的电话销售好做不
  • 济南企业营销型网站建设合肥网站推广公司哪家好
  • 专业网站建设软件wordpress页面调用分类目录