单链表、双链表以及环形单链表

2023-11-11

1.单链表



import java.util.Stack;

public class SingleLinkedListDemo {
	public static void main(String[] args) {
		// 测试
		HeroNode h1 = new HeroNode(1,"a啊","a神");
		HeroNode h2 = new HeroNode(3,"b啊","b神");
		HeroNode h3 = new HeroNode(5,"c啊","c神");
		HeroNode h4 = new HeroNode(7,"d啊","d神");
		
		HeroNode a1 = new HeroNode(2,"r","r神");
		HeroNode a2 = new HeroNode(4,"nv啊","n神");
		HeroNode a3 = new HeroNode(6,"h啊","h神");
		HeroNode a4 = new HeroNode(8,"e啊","e神");

		SingleLinkedList single = new SingleLinkedList();
		SingleLinkedList single2 = new SingleLinkedList();
		SingleLinkedList single3 = new SingleLinkedList();
		//single.add(h1);
		//single.add(h2);
		//single.add(h3);
		//single.add(h4);
		
		single.addByOrder(h1);
		single.addByOrder(h3);
		single.addByOrder(h2);
		single.addByOrder(h4);
		single.list();
		
		single2.addByOrder(a1);
		single2.addByOrder(a3);
		single2.addByOrder(a2);
		single2.addByOrder(a4);
		single2.list();
		
		merge(single.getHead(),single2.getHead(),single3.getHead());
		System.out.println("合并");
		single3.list();
		
		System.out.println("链表逆序打印");
		printReverseLinkList(single.getHead());
	
		
		System.out.println("链表反转");
		reverseLinkList(single.getHead());
		single.list();
	
		System.out.println("修改链表后");
		HeroNode newHeroNode = new HeroNode(3,"k神","kk"); 
		single.update(newHeroNode);
		single.list();
		
		System.out.println("删除一个后");
		single.delete(2);
		single.list();
		
		System.out.println("有效节点数"+getLength(single.getHead()));
		
		HeroNode res = findLastIndexNode(single.getHead(), 1);
		System.out.println("倒数第1个节点"+res);
	}
	
	
	// 合并两个有序的单链表
	 public static void merge(HeroNode head1, HeroNode head2,HeroNode head3) {
		// 如果两个链表均为空,则无需合并,直接返回
		if(head1.next == null && head2.next == null) {
			return;
		}
		if(head1.next == null) {
			head3.next = head2.next;
		}else {
			head3.next = head1.next;
			HeroNode cur2 = head2.next;
			HeroNode cur3 = head3;
			HeroNode next = null;
			while(cur2 != null) {
				if(cur3.next == null) {
					cur3.next = cur2;
					break;
				}
				if(cur2.no < cur3.next.no) {
					next = cur2.next;
					cur2.next = cur3.next;
					cur3.next = cur2;
					cur2 = next;
				}
				cur3 = cur3.next;
			}
		}
	 }
	
	// 逆序打印单链表  利用栈 先进后出的特点来实现
	public static void printReverseLinkList(HeroNode head) {
		if(head.next == null) {
			return; // 空链表,不能打印
		}
		// 创建要给一个栈,将各个节点压入栈
		Stack<HeroNode> stack = new Stack();
		HeroNode cur = head.next;
		while(cur != null) {
			stack.push(cur);
			cur = cur.next;
		}
		while(stack.size() > 0) {
			System.out.println(stack.pop());
		}
	}
	
	// 将单链表反转
	public static void reverseLinkList(HeroNode head) {
		if(head.next == null || head.next.next == null) {
			return;
		}
		
		HeroNode cur = head.next;
		HeroNode next = null;  // 指向当前节点cur的下一个节点
		HeroNode reverseHead = new HeroNode(0,"","");
		
		// 遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表reverseHead 的最前端
		while(cur != null) {
			next = cur.next;
			cur.next = reverseHead.next;
			reverseHead.next = cur;
			cur = next;
		}
		head.next = reverseHead.next;
	}
	
	// 查找单链表中的倒数第k个节点
	// 1.编写一个方法接收head节点,同时接收一个index
	// 2.index 表示倒数第index个节点
	// 3.先把链表从头到尾遍历,得到链表的总长度 getLength
	// 4.得到总长度后,我们从链表的第一个开始遍历(getLength()-index)个
	public static HeroNode findLastIndexNode(HeroNode head, int index) {
		if(head.next == null) {
			return null;
		}
		// 第一次遍历得到链表的长度
		int size = getLength(head);
		// 第二次遍历 getLength()-index,就是倒数第k个
		if(index <= 0 || index > size) {
			return null;
		}
		HeroNode temp = head.next;
		for(int i = 0; i < size - index; i++) {
			temp = temp.next;
		}
		return temp;
	}
	
	// 方法:获取到单链表的节点的个数(如果是带头结点的链表,需求不统计头节点
	public static int getLength(HeroNode head) {
		if(head.next == null) {
			return 0;
		}
		int length = 0;
		// 没有统计头结点
		HeroNode cur = head.next;
		while(cur != null) {
			length++;
			cur = cur.next;
		}
		return length;
	}
	
}



// 定义SingleLinkedList 管理我们的Hero
class SingleLinkedList {
	// 先初始化一个头节点,头节点不要动
	private HeroNode head = new HeroNode(0,"","");
	
	// 返回头结点
	public HeroNode getHead() {
		return head;
	}
	
	// 添加节点到单项链表
	// 1.找到当前链表的最后节点
	// 2.将最后的这个节点的next 指向 新的节点
	public void add(HeroNode heroNode) {
		
		// 因为head不能动,我们需要一个辅助遍历temp
		HeroNode temp = head;
		// 遍历链表,找到最后
		while(true) {
			// 找到链表的最后
			if(temp.next == null) {
				break;
			}
			// 如果没有找到最后,将temp后移
			temp = temp.next;
		}
		// 当退出while循环时,temp指向了链表的最后
		// 将最后这个节点的next指向新的节点
		temp.next = heroNode;
	}
	
	// 添加 根据排名插入指定位置
	public void addByOrder(HeroNode heroNode) {
		HeroNode temp = head;
		boolean flag = false; // 标志添加的编号是否存在
		while(true) {
			if(temp.next == null) {// 说明temp在最后
				break;
			}
			if(temp.next.no > heroNode.no) { // 添加在temp后面
				break;
			}
			if(temp.next.no == heroNode.no) { // 编号已存在
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if(flag) { // 编号已存在
			System.out.printf("准备插入的英雄的编号%d已存在,不能加入\n",heroNode.no);
		}else {
			heroNode.next = temp.next;
			temp.next = heroNode;
		}
	}
	
	// 修改节点信息,根据no编号来修改,no编号不能改
	public void update(HeroNode newHeroNode) {
		// 是否为空
		if(head.next == null) {
			System.out.println("链表空");
			return;
		}
		// 找到需要修改的节点
		HeroNode temp = head.next;
		boolean flag = false; // 表示是否找到
		while(true) {
			if(temp == null) {
				break;
			}
			if(temp.no == newHeroNode.no) {
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if(flag) {
			temp.name = newHeroNode.name;
			temp.nickname = newHeroNode.nickname;
		}else {
			System.out.println("没有找到编号%d的节点,不能修改"+newHeroNode.no);
		}
	}
	
	
	// 删除节点  head节点不能动
	public void delete(int no) {
		HeroNode temp = head;
		boolean flag = false; //是否找到
		if(temp.next == null) {
			System.out.println("链表为空");
			return;
		}
		while(true) {
			if(temp.next == null) {
				break;
			}
			if(temp.next.no == no) {
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if(flag) {
			temp.next = temp.next.next;
		}else {
			System.out.println("没有找到编号%d的节点,不能修改"+no);
		}
	}
	
	// 显示链表(遍历)
	public void list() {
		// 判断链表是否为空
		if(head.next==null) {
			System.out.println("链表空");
			return;
		}
		// 因为head不能动,我们需要一个辅助遍历temp
		HeroNode temp = head.next;
		while(true) {
			// 判断是否到链表最后
			if(temp == null) {
				break;
			}
			System.out.println(temp);
			// 将next后移
			temp = temp.next;
		}
	}
}

// 定义HeroNode 每个HeroNode 对象都是一个节点
class HeroNode {
	public int no;
	public String name;
	public String nickname;
	public HeroNode next; // 指向下一个节点
	
	// 构造器
	public HeroNode(int no, String name, String nickname) {
		this.no = no;
		this.name = name;
		this.nickname = nickname;
	}

	// 重写toString
	@Override
	public String toString() {
		return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]";
	}
	
	
}

2.双向链表


// 双向链表
public class DoubleLinkedListDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		HeroNode2 h1 = new HeroNode2(2,"a啊","a神");
		HeroNode2 h2 = new HeroNode2(1,"b啊","b神");
		HeroNode2 h3 = new HeroNode2(4,"c啊","c神");
		HeroNode2 h4 = new HeroNode2(3,"d啊","d神");
		
		
		DoubleLinkedList dou = new DoubleLinkedList();
		
		dou.addByOrder(h1);
		dou.addByOrder(h2);
		dou.addByOrder(h3);
		dou.addByOrder(h4);
		
		//dou.add(h1);
		//dou.add(h2);
		//dou.add(h3);
		//dou.add(h4);
		System.out.println("遍历所有");
		dou.list();
		
		HeroNode2 newHeroNode = new HeroNode2(4,"god","神");
		dou.update(newHeroNode);
		System.out.println("修改第四个");
		dou.list();
		
		dou.del(1);
		System.out.println("删除no=1的");
		dou.list();
	}

}

class DoubleLinkedList {
	private HeroNode2 head = new HeroNode2(0,"","");

	public HeroNode2 getHead() {
		return head;
	}
	
	// 按照编号添加
	public void addByOrder(HeroNode2 heroNode) {
		HeroNode2 temp = head;
		boolean flag = false; // 标志添加的编号是否存在
		while(true) {
			if(temp.next == null) {
				break;
			}
			if(temp.next.no > heroNode.no) {
				break;
			}
			if(temp.next.no == heroNode.no) {
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if(flag) {
			System.out.printf("准备插入的英雄的编号%d已存在,不能加入\n",heroNode.no);
		}else {
			if(temp.next != null) {
				heroNode.next = temp.next;
				temp.next.pre = heroNode;
			}
			temp.next = heroNode;
			temp.next.pre = temp;
		}
	}
	
	// 添加 默认添加到链表末尾
	public void add(HeroNode2 heroNode) {
		HeroNode2 temp = head;
		while(true) {
			if(temp.next == null) {
				break;
			}
			temp = temp.next;
		}
		// 形成双向链表
		temp.next = heroNode;
		heroNode.pre = temp;
	}
	
	// 修改一个节点的内容
	public void update(HeroNode2 newHeroNode) {
		if(head.next == null) {
			System.out.println("链表空");
			return;
		}
		HeroNode2 temp = head.next;
		boolean flag = false;
		while(true) {
			if(temp == null) {
				break;
			}
			if(temp.no == newHeroNode.no) {
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if(flag) {
			temp.name = newHeroNode.name;
			temp.nickname = newHeroNode.nickname;
		}else {
			System.out.println("没有找到编号%d的节点,不能修改"+newHeroNode.no);
		}
	}
	
	// 删除一个节点
	// 双向链表可直接找到需要删除的点
	public void del(int no) {
		if(head.next == null) {
			System.out.println("链表空");
			return;
		}
		
		HeroNode2 temp = head.next;
		boolean flag = false;
		while(true) {
			if(temp == null) {
				break;
			}
			if(temp.no == no) {
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if(flag) {
			temp.pre.next = temp.next;
			// 如果是最后一个节点,就不需要执行下面这句话,不然会出现空指针异常
			if(temp.next != null) {
				temp.next.pre = temp.pre;
			}
		}
	}

	// 遍历
	public void list() {
		if(head.next == null) {
			System.out.println("链表空");
			return;
		}
		HeroNode2 temp = head.next;
		while(true) {
			if(temp == null) {
				break;
			}
			System.out.println(temp);
			temp = temp.next;
		}
	}
	
}

class HeroNode2 {
	public int no;
	public String name;
	public String nickname;
	public HeroNode2 next;
	public HeroNode2 pre;
	
	public HeroNode2(int no, String name, String nickname) {
		this.no = no;
		this.name = name;
		this.nickname = nickname;
	}

	@Override
	public String toString() {
		return "HeroNode2 [no=" + no + ", name=" + name + ", nickname=" + nickname + "]";
	}
	
	
}

3.环形单链表(约瑟夫问题)



//约瑟夫问题 环形单链表
//约瑟夫(Joseph)问题的一种描述是:编号为 1,2,…,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数),
//一开始任选一个整数作为报数上限 m,从第一人开始按顺时针方向从自 1 开始顺序报数,报到 m 时停止报数。报 m 的人出列,
//将他的密码作为新的 m 值,从他的顺时针方向上的下一个人开始重新从 1 报数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序。

public class Josepfu {
	public static void main (String[] args) {
		// 构建环形链表
		CircleSingleLinkedList circleSingleLinkedList = new CircleSingleLinkedList();
		circleSingleLinkedList.addBoy(5);
		circleSingleLinkedList.showBoy();
		
		System.out.println("小孩出圈");
		circleSingleLinkedList.countBoy(1,2,5); // 2 4 1 5 3
	}
}

// 创建一个环形的单向链表
class CircleSingleLinkedList {
	// 创建一个first节点,当前没有编号
	private Boy first = null;
	
	// 添加小孩节点,构建成一个环形的链表
	public void addBoy(int nums) {
		// nums 做一个数据校验
		if(nums < 1) {
			System.out.println("数据nums不正确");
			return;
		}
		Boy curBoy = null; // 辅助指针,帮助构建环形链表
		// 使用for循环来创建环形链表
		for(int i = 1; i <= nums; i++) {
			// 根据编号,创建小孩节点
			Boy boy = new Boy(i);
			// 如果是第一个小孩
			if (i == 1) {
				first = boy;
				first.setNext(first); // 构成环
				curBoy = first; // 让curBoy指向第一个小孩
			}
				curBoy.setNext(boy);
				boy.setNext(first);
				curBoy = boy;
		}
	}
	
	// 遍历当前的环形链表
	public void showBoy() {
		// 判断链表是否为空
		if (first == null) {
			System.out.println("链表为空");
			return;
		}
		// 因为first不能动,因此我们仍然使用一个辅助指针完成遍历
		Boy curBoy = first;
		while(true) {
			System.out.printf("小孩的编号%d\n",curBoy.getNo());
			if(curBoy.getNext() == first) { // 说明已经遍历完毕
				break;
			}
			curBoy = curBoy.getNext(); // curBoy后移
		}
	}
	
	// 根据用户的输入,生成一个小孩出圈的顺序
	// 1.需求创建一个辅助指针 helper,事先应该指向环形链表的最后这个节点
	//  小孩报数前,先让first和helper移动k-1次
 	// 2.当小孩报数时,让first和helper指针同时的移动m-1次
	// 3.这是就可以将first指向的小孩节点出圈 
	//       first = first.next   helper.next = first 
	//  原来first指向的节点就没有任何引用,就会被回收
	/***
	 * 
	 * @param startNo 表示从第几个小孩开始数
	 * @param countNum 表示数几下
	 * @param nums 表示最初有几个小孩在圈中
	 */
	public void countBoy(int startNo, int countNum, int nums) {
		if(first == null || startNo < 1 || startNo > nums) {
			System.out.println("参数输入有误,请重新输入");
			return;
		}
		// 创建一个辅助指针,帮助小孩出圈
		Boy helper = first;
		while(true) {
			if(helper.getNext() == first) {
				break;
			}
			helper = helper.getNext();  // 用方法是因为next私有了
		}
		// 小孩报数前,先让first和helper移动k-1次
		for(int j = 0; j < startNo - 1; j++) {
			first = first.getNext();
			helper = helper.getNext();
		}
		// 当小孩报数时,让first和helper指针同时的移动m-1次,然后出圈
		while(true) {
			if(helper == first) { // 说明圈中只有一个节点
				break;
			}
			// 让first和helper指针同时的移动countNum - 1
			for(int j = 0; j < countNum - 1; j++) {
				first = first.getNext();
				helper = helper.getNext();
			}
			// 这时first指向的节点,就是要出圈的小孩节点
			System.out.printf("小孩%d出拳 \n", first.getNo());
			first = first.getNext(); // 出圈
			helper.setNext(first); // 构造环形
		}
		System.out.printf("最后留在圈中的小号编号%d\n",first.getNo());
	}
	
}


// 创建一个Boy类,表示一个节点
class Boy {
	private int no; // 编号
	private Boy next; // 指向下一个节点,默认null
	
	public Boy(int no) {
		this.no = no;
	}
	
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
	public Boy getNext() {
		return next;
	}
	public void setNext(Boy next) {
		this.next = next;
	}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单链表、双链表以及环形单链表 的相关文章

  • 按键时关闭 ModalWindow

    我希望能够在用户按下某个键 在我的例子中是 ESC 时关闭 ModalWindow 我有一个用于按键的 Javascript 侦听器 它调用取消按钮 ID 的单击事件 jQuery modalWindowInfo closeButtonId
  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 什么是NAT?

    NAT是一种地址转换技术 它可以将IP数据报文头中的IP地址转换为另一个IP地址 并通过转换端口号达到地址重用的目的 NAT作为一种缓解IPv4公网地址枯竭的过渡技术 由于实现简单 得到了广泛应用 NAT解决了什么问题 随着网络应用的增多
  • 设计模式--装饰器模式

    装饰器模式 属于结构型模式基本原理 创建一个装饰器用来对一个现有对象添加新功能 不改变对象结构主要流程 1 根据对象创建一个修饰类 该修饰类要保持方法签名完整 2 在修饰类中根据需求添加新的功能 3 使用时将对象或对象的引用传入修饰类中 注
  • rabbitmq简介

    开发十年 就只剩下这套Java开发体系了 gt gt gt 1 AMQP AMQP协议是一个高级抽象层消息通信协议 RabbitMQ是AMQP协议的实现 它主要包括以下组件 1 1 Server broker 接受客户端连接 实现AMQP消
  • DELETE与DROP 在数据库中的使用方法和区别

    DML data manipulation language 数据操纵语言 就是我们最经常用到的 SELECT UPDATE INSERT DELETE 主要用来对数据库的数据进行一些操作 DML 语句都是显式提交 执行完之后 处理的数据
  • tsconfig之moduleResolution详解

    作用 moduleResolution 模块解析策略 是指编译器在查找导入模块内容时所遵循的流程 模块解析分析 如下代码 编辑器会采用模块解析策略 Node 和 Classic 去查找 moduleB 在哪里 如果最后找不到 编译器不能解析
  • RESTful API接口

    RESTful规范 Restful API是目前比较成熟的一套互联网应用程序的API设计理念 Rest是一组架构约束条件和原则 如何Rest约束条件和原则的架构 我们就称为Restful架构 Restful架构具有结构清晰 符合标准 易于理
  • JAVA报错:Variable 'vv' is accessed from within inner class, needs to be declared final

    内部类中使用但未声明的任何局部变量必须在内部类的正文之前明确分配
  • struts2中validator配置文件验证不起作用的问题解决办法、根源

    在采用struts的xml配置方式校验数据时 发现怎么也不起作用 无法按照正常流程 走到input指向的页面 一 问题的解决 很多博客说明了自己查找的方式 最后都指明了是因为配置文件格式不正确的原因 出现这种问题的时候 应该从下面4个部分考
  • SpringCloud Alibaba 教程

    SpringCloud Alibaba GitHub官方地址 https github com alibaba spring cloud alibaba blob master README zh md SpringCloud Alibab
  • 大学生团体天梯赛(第九届)

    题目地址 天梯赛 include
  • 憨批的语义分割重制版4——TF2 搭建自己的PSPNet语义分割平台

    憨批的语义分割重制版4 TF2 搭建自己的PSPNet语义分割平台 学习前言 什么是PSPNet模型 代码下载 PSPNet实现思路 一 预测部分 1 主干网络介绍 2 加强特征提取结构 3 利用特征获得预测结果 二 训练部分 1 训练文件
  • Vue3 之 readonly

    Vue3 之 readonly readonly 取得一个对象 反应性或普通 或ref并返回一个只读代理 访问的任何嵌套属性也将是只读的 传入普通对象等返回只读代理 传入普通数值或字符串不能变成只读 例如 readonly abc cons
  • 约束下的最优求解:拉格朗日乘数法和KKT条件

    机器学习面对各种各样的求解极值或者最值问题 现在对常见的求解极值或者最值问题思路做一下理论上的梳理 最值问题 简单了解最值问题 求最值是非常常见的问题 比如如何选择交通路线 最快地到达某地 如何用手头的钱买到分量最重的水果等等 我们可以把需
  • 解决An attempt was made to call a method that does not exit问题

    解决An attempt was made to call a method that does not exist The attempt was made from the following location 最近在学习springc
  • KPCA代码

    KPCA算法在TE过程故障诊断的应用 KPCA算法介绍 KPCA代码 数据预处理 计算核矩阵 中心化核矩阵 协方差矩阵的特征值分解 确定主元个数 将特征向量按特征值的大小顺序排序 单位化特征向量 重建测试数据 控制限的设定 故障数据的检测
  • HTML学习-表单语法、表单元素格式、单选框、多选框、按钮 2021-1-19

    表单语法 表单form action 表单提交的位置 可以是网站 也可以是一个请求处理地址 method post get 提交方式 get方式提交 我们可以再url中看到我们提交的信息 不安全 高效 post方式提交 比较安全 传输大文件
  • 利用setTimeout实现倒计时

    倒计时60秒 function countDown that count if count 0 that setData timeCountDownTop 获取验证码 counting false return that setData c
  • stata学习笔记

    受限被解释变量类型 普通断尾随机变量 断尾回归 对于分析的样本解释变量有上限或者下限的要求 零断尾计数数据 零断尾泊松回归和负二项回归 正整数 偶然断尾 自选择问题 样本选择模型 因为某些原因 导致被解释变量的取值有所不同 归并数据 归并T
  • 实例一 LINUX OS 简单制作 JAVA WEB + TOMCAT7.0 RPM 安装包

    1 安装rpmbuild 并配置环境 1 1 首先 你应该检查 rpmbuild 是否已经被安装在你的系统上 你将会利用这个工具从 spec 文件或 SRPM 组件创建 RPM 要检查它是否被安装了 请执行 rpmbuild showrc
  • 单链表、双链表以及环形单链表

    1 单链表 import java util Stack public class SingleLinkedListDemo public static void main String args 测试 HeroNode h1 new He