JavaSE
基础数据结构
涛哥不爱笑哦
一直在自学的菜鸡研究僧
展开
-
字符串--括号序列
给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。示例1输入:"["返回值:false示例2输入:"[]"返回值:true解题思路:参考了牛客网上的一个大佬的要判断括号的有效性,左括号必须和右括号相对应。如果是有效括号,并且他们中间还有括号,那么他们必须也是有效的,所以最简单的一种方式就是使用栈来解决。我们遍历字符串原创 2021-09-12 17:11:15 · 361 阅读 · 0 评论 -
字符串--判断回文
描述给定一个字符串,请编写一个函数判断该字符串是否回文。如果回文请返回true,否则返回false。输入:"absba"返回值:true输入:"ranko"返回值:false输入:"yamatomaya"返回值:false输入:"a"返回值:true解题思路:在字符串的第一个位置为i,最后一个位置为j;j=arr.length()-1;如果说字符串只有一个元素,就直接返回true;如果字符串长度大于1,i<j,并且i对应的元素值不等于j对应的元素值的话,就返回f原创 2021-09-12 16:44:09 · 825 阅读 · 0 评论 -
Properties 类读取配置文件
//Properties用来读取配置文件 @Test public void test3() throws Exception { Properties pro = new Properties(); //此时的文件默认在当前的module下 //读取配置文件的方式一 FileInputStream fis=new FileInputStream("jdbc1.properties");// pro.load(.原创 2021-08-10 10:28:23 · 82 阅读 · 0 评论 -
栈和队列的应用
两个栈模拟一个队列 两个队列模拟一个栈 给定一个序列,判断该序列是否是出栈序列两个栈模拟一个队列目的:让序列 1,2,3,4,5. 输出的顺序还是1,2,3,4,5 ,只有栈可以用。实现思路:建两个栈,先让元素1,2,3,4,5,顺序进入栈1,然后再让元素5,4,3,2,1,进入栈2,这时候栈2的出栈顺序就是1,2,3,4,5了。public static void twoStackToOneQueue(int[] arr){ //定义两个栈 ...原创 2021-08-04 17:09:55 · 109 阅读 · 0 评论 -
单链表--给定一个链表,删除指定节点,O(1)时间复杂度删除指定节点
目的:在给定一个链表,删除指定的节点,让其时间复杂度为O(1)实现思路:让给定节点node的下一个节点p的value赋值给node,再让p=node的next的next。这种方法,当待删除节点为最后一个节点时,该方法就出错了,就使用遍历的方法来删除。删除最后一个节点的时间复杂度为O(n),但是前面n-1和节点删除的时间复杂度为O(1),总体来看,这种方法满足条件,使时间复杂度为O(1)。...原创 2021-08-03 17:47:47 · 1949 阅读 · 0 评论 -
单链表--两个单链表相交,输出相交节点
目的:如果两个单链表相交,输出他们相交的节点。实现思路:有两个链表,长链表和短链表,让长链表先走差值步,然后长链表和短链表一起遍历,直到找到相交的节点(两个节点,返回哪个都可以)public Node<T> MeetLink(SingleLink<T> link){ //1.让长链表先走差值步,然后长链表和短链表一起遍历,直到p=q return p int curSize=size; int LinkSize=link.size; int原创 2021-08-03 17:47:55 · 156 阅读 · 0 评论 -
单链表--判断一个链表中是否存在环状,如果链表有环,输出环的入口点
目的:判断一个链表中是否存在环状,如果链表有环,输出环的入口点。实现思路:快慢循环;设置两个节点,都指向头结点位置,快的循环走两步,慢的循环走一步。判断是否有环public boolean isLoop(){ Node<T> fast=head; Node<T> slow=head; do{ if(fast==null||fast.next==null){ return false;原创 2021-08-03 17:48:07 · 154 阅读 · 0 评论 -
单链表--输出倒数第K个节点
目的:输入K值,得出单链表中倒数第K个节点。实现思路:设置两个节点p,q,都指向头节点位置,先让p走差值k步,走完之后,p,q两个同时走,如果p走到尾节点,就结束,其中q就是倒数第k个节点。public Node<T> K(int k){ Node<T> p=head;//p是相差k步 Node<T> q=head; int i=1; while(i<k){ if(p.next==null){ .原创 2021-08-02 18:31:35 · 434 阅读 · 0 评论 -
单链表--两个单链表分别有序,链表合并为一个有序单链表
目的:将两个有序的单链表合并成一个有序的单链表实现思路:原创 2021-08-02 18:05:21 · 768 阅读 · 0 评论 -
单链表逆置
目的:将一个单链表进行逆置,例如:1 3 2 7 9 --->9 3 2 7 1实现思路:先将头结点的位置变成尾节点,将头节点的next,指向新的尾节点,循环执行public void reverseLink(){ Node<T> p=head; Node<T> q=p.next; Node<T> s=q.next; if(head==null || head.next==null){ //只有一个节点或者空链.原创 2021-08-02 17:23:13 · 86 阅读 · 0 评论 -
单链表--更改值
目的:在链表中,将A值更改为B值实现思路:通过遍历链表,查找到该节点对应的value值,将其value值与给定的value值进行比较,如果是给定的value值,就将其更改为要更改的值public void change(T srcValue, T aimValue) { for(Node<T> p=head;p!=null;p=p.next){ if(p.value.compareTo(srcValue)==0){ p.value=aim原创 2021-08-02 16:22:50 · 527 阅读 · 0 评论 -
单链表--查看节点中是否含有该值
目的:给定一个值,在链表中查找是否有该值。实现思路:遍历链表进行查找,有的话返回true,没有返回false。public boolean contains(T value) { for(Node<T> p=head;p!=null;p=p.next){ if(p.value.compareTo(value)==0){ return true; } } return false;原创 2021-08-02 16:10:56 · 184 阅读 · 0 评论 -
单链表--移除指定的值
目的:删除链表中的某个节点的value值实现思路:新建一个新节点p,指向头节点。遍历链表,循环条件是遍历的节点的next的value值与给定的value进行相比较,如果不相等,就遍历下一个;找到删除的节点后,将其前一个节点p的next的value和next都置为null,再把p的next等于q(贯穿过去)。public void removeValue(T value) { if(head==null){//链表为空 return; }原创 2021-08-02 16:02:27 · 287 阅读 · 0 评论 -
单链表--删除尾节点
目的:删除一个链表中的末尾节点。实现思路:新建一个指向头节点的节点。遍历循环链表,直到找到链表尾节点,让新建的节点的next为空,尾节点的value为null,再把新建的节点更新至尾节点的位置。public void removeTail() { if(head==null){//链表为空 return; } else if(size==1){//只有一个节点 head.value=null; head=null;原创 2021-08-02 15:34:55 · 4450 阅读 · 1 评论 -
单链表--移除头节点
目的:删除一个单链表的头节点。实现:让头节点的value值为null,再新建一个节点(头节点的next节点),然后让头节点的next为null,这样头节点相当于删除了(next,value都为null了),再把新节点赋为头节点。public void removeHead() { if(head==null){ return; }else if(head.next==null){ //只有一个节点 head.value=nul原创 2021-08-02 15:20:12 · 3015 阅读 · 0 评论 -
单链表-尾增
目的:向一个链表的尾部增加节点。不带尾节点版本:实现的思路:新建一个新的节点指向头节点的位置,然后遍历寻找到链表的尾节点,循环条件是节点的next不等于null。循环结束后让原来的尾节点的next由null变为指向新的节点node。public void addTail(T value) {//时间复杂度为O(n) Node<T> node =new Node<>(value); if(head==null){//链表为空 head=no原创 2021-08-02 15:03:32 · 467 阅读 · 0 评论