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

延边网站建设/网络服务提供者知道或者应当知道

延边网站建设,网络服务提供者知道或者应当知道,哪有做课件赚钱的网站,滕州营销型网站建设此文转载自&#xff1a;https://blog.csdn.net/weixin_44048140/article/details/113107870开心学算法的第四天 环形单链表环形列表结构构造环形列表class singleLinked<E>{//环形列表头节点private Node<E> head;//环形列表元素个数private int size;class Node&l…
此文转载自:https://blog.csdn.net/weixin_44048140/article/details/113107870

开心学算法的第四天

环形单链表

环形列表结构

在这里插入图片描述

构造环形列表

class singleLinked<E>{//环形列表头节点private Node<E> head;//环形列表元素个数private int size;class Node<E>{private E val;private Node<E> next;public Node(E val){this.val = val;}}
}

添加元素

在这里插入图片描述
//添加元素public void add(E val){//如果是空链表if (head == null){head = new Node<>(val);head.next = head;size++;return;}//非空链表常规操作Node newNode = new Node(val);//缓存头节点Node node = head;//遍历至尾结点出while (node.next != head){node = node.next;}//将节点加在尾部node.next = newNode;newNode.next = head;size++;}

删除元素

删除元素:分三种情况
1.删除头节点

删除头节点要找到链表的最后一个节点,然后head后移一个也就是
head = head.next,然后使最后一个节点的next指向head即可。

2.删除链表仅有的一个节点

这里需要用size进行判断,我的size先进行了减减操作,所有条件是
size == 0就可以直接head= null删除成功直接返回。

3.删除常规的节点

定义一个快指针node,慢指针low然后然后找到要删除的节点,使用
low = low.next就可以删除当前node节点。

//删除指定位置元素public boolean remove(E val){//判断链表为空if (head == null){System.out.println("链表为空删除失败");return false;}size--;//删除头节点if (head.val == val && size != 0){//找到尾结点Node tail = head;while (tail.next != head){tail = tail.next;}head = head.next;tail.next = head;return true;}else if (size == 0){//表示的是删除最后一个节点head = null;return true;} else{//删除平常节点Node node = head;Node low = head;while(node.val != val){low = node;node = node.next;}low.next = low.next.next;return true;}}

打印当前链表

//打印链表public void showLinked(){if (head == null){System.out.println("链表为空");return;}Node node = head;int index = 0;while(index++ < size){System.out.print(node.val+" ");node = node.next;}}

获取节点个数

//获取链表有效个数public int getSize(){return this.size;}

所有代码

class singleLinked<E>{private Node<E> head;private int size;class Node<E>{private E val;private Node<E> next;public Node(E val){this.val = val;}}//添加元素public void add(E val){//如果是空链表if (head == null){head = new Node<>(val);head.next = head;size++;return;}//非空链表常规操作Node newNode = new Node(val);//缓存头节点Node node = head;//遍历至尾结点出while (node.next != head){node = node.next;}//将节点加在尾部node.next = newNode;newNode.next = head;size++;}//删除指定位置元素public boolean remove(E val){//判断链表为空if (head == null){System.out.println("链表为空删除失败");return false;}size--;//删除头节点if (head.val == val && size != 0){//找到尾结点Node tail = head;while (tail.next != head){tail = tail.next;}head = head.next;tail.next = head;return true;}else if (size == 0){//表示的是删除最后一个节点head = null;return true;} else{//删除平常节点Node node = head;Node low = head;while(node.val != val){low = node;node = node.next;}low.next = low.next.next;return true;}}//打印链表public void showLinked(){if (head == null){System.out.println("链表为空");return;}Node node = head;int index = 0;while(index++ < size){System.out.print(node.val+" ");node = node.next;}}//获取链表有效个数public int getSize(){return this.size;}
}

约瑟夫环问题

在这里插入图片描述

问题描述:

num个人围成一圈对其进行编号从第一个人开始报数,每当到第count个时当前这个人出局,然后下一个人从1开始继续依次类推到最后剩余的那个人,打印出剩余那个人的编号。

数组解法

/*** 问题描述:* num个人围成一圈从第一个人开始报数,每当到第count个时当前这个人出局* 然后下一个人从1开始继续依次类推到最后剩余的那个人,打印出剩余那个人的编号* @param num       表示一个几个人* @param count     报的数字*/public static void joseph(int num,int count){//初始化arr数组int[] arr = new int[num];for (int i = 0; i < arr.length; i++) {arr[i] = i+1;}//创建相同长度的boolean数组标记是否已经出局boolean[] flag = new boolean[arr.length];//查看数组中剩余的元素int residue = arr.length;//用来计数int number = 1;while(residue != 1){for (int i = 0;i < arr.length;i++){if (number % count == 0 && !flag[i]){flag[i] = true;residue--;number++;}if (flag[i]){continue;}number++;}}//打印最后一个元素for (int i = 0; i < arr.length; i++) {if (!flag[i]){System.out.println("最后一个元素"+arr[i]);}}}

链表解法

使用上面的环形链表即可求解。

循环的条件直接是getsize == 1就可以判断当前只剩一个人,每次移除掉指定节点即可,这种做法相对于数组的解法简单且清晰。

//约瑟夫环问题public void joseph(int num,int count){//构建链表Node node = head;int i = 1;while (getSize() != 1){if (i%count==0) {remove((E) node.val);}i++;node = node.next;}System.out.println(head.val);}

在这里插入图片描述

点个赞呗~
http://www.lbrq.cn/news/793171.html

相关文章:

  • access是不是网页制作工具/百度seo发帖推广
  • 网站制作团队/百度长尾关键词挖掘
  • 烟台网站制作维护/搜索引擎google
  • 旧金山网站建设/国外网站
  • 长沙网站建设推荐/深圳seo排名
  • 国内专业做网站/百度客服24小时电话人工服务
  • 怎么做网站教程+用的工具/微博营销的特点
  • 网站baohe/网络营销策划的概念
  • 网站建设需求多少钱大概/app开发制作
  • 易营宝mip网站建设/seo综合查询怎么关闭
  • 景德镇做网站/全网最好的推广平台
  • 软件下载网站建设/如何进行网络营销
  • 做慧聪网价格网站价格/今天发生的重大新闻5条
  • 网站功能列表/百度热搜关键词排名优化
  • 官方网站建设 在线磐石网络/平台网站开发公司
  • wordpress倒序阅读/重庆seo服务
  • dw网站建设框架大小设定/百度站长收录提交入口
  • 如何做个免费的网站/百度信息流推广平台
  • 怎么制作一个app软件/沧州网站建设优化公司
  • api软件/好口碑关键词优化
  • 织梦做响应式网站/seo排名点击器
  • wordpress+博客主题/东莞seo建站
  • 电子商务网站建设课程设计代码/怎么在网上推广产品
  • 老年门户网站建设的意义/百度指数查询网
  • 网站建设哪些好/百度搜索量
  • 阿里云 云虚拟主机 wordpress/百度seo指数查询
  • 个人备案做门户网站/百度网址大全下载安装
  • 网站视频超链接怎么做/网络广告
  • 动漫做暧视频网站/如何制作自己的公司网站
  • 装修公司网站源码/关键词优化的主要工具
  • Flutter各大主流状态管理框架技术选型分析及具体使用步骤
  • 一种基于入侵杂草优化算法(IWO)的聚类算法,并与K-Means、高斯混合模型(GMM)进行对比,Matlab
  • Java试题-选择题(6)
  • 梦幻花瓣雨
  • 【Android】通知
  • Docker 镜像打包为 ZIP 文件便于分享和转发