- 浏览: 787419 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
萨琳娜啊:
Java读源码之Netty深入剖析网盘地址:https://p ...
Netty源码学习-FileRegion -
飞天奔月:
写得有趣 ^_^
那一年你定义了一个接口 -
GoldRoger:
第二个方法很好
java-判断一个自然数是否是某个数的平方。当然不能使用开方运算 -
bylijinnan:
<script>alert("close ...
自己动手实现Java Validation -
paul920531:
39行有个bug:"int j=new Random ...
java-蓄水池抽样-要求从N个元素中随机的抽取k个元素,其中N无法确定
public class DeleteNode_O1_Time { /** * Q 60 在O(1)时间删除链表结点 * 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点 * * Assume the list is: * head->...->nodeToDelete->mNode->nNode->...->tail * you have already the point of 'nodeToDelete' in hand.So what you need to do is: * 1.copy the data of 'mNode' to 'nodeToDelete' * 2.nodeToDelete.next=nNode; * However,when deleting the last node,you have to iterate from 'head'.No shortcut. * * ---public static void deleteNode(Node head,Node nodeToDelete){ * cannot do it like that.Because you cannot set head=null to make 'list' empty. * see 'class ParameterTransfer' */ public static void deleteNode(List list,Node nodeToDelete){ Node head=list.head; if(head==null||nodeToDelete==null){ return; } if(head.next==null&&nodeToDelete==head){//Only one node in list and you happen to delete the node. list.head=null;//head=null;-->wrong return; } Node node=head; if(node.next!=null&&nodeToDelete!=null){ Node mNode=nodeToDelete.next; if(mNode!=null){ Node nNode=mNode.next; nodeToDelete.data=mNode.data; nodeToDelete.next=nNode; }else {//'nodeToDelete' is the last Node. Node previous=node; while(node.next!=null){ previous=node; node=node.next; } previous.next=null; return; } } } private static class List{ private Node head; Node createList(int[] data){ if(data==null||data.length==0){ return null; } Node previous=null; for(int len=data.length,i=len-1;i>=0;i--){ head=new Node(data[i]); head.next=previous; previous=head; } return head; } void printList(){ Node node=head;//don't use 'head' immediately.It wastes my time to find the bug... while(node!=null){ System.out.print(node.data+" "); node=node.next; } System.out.println(); } Node getNodeAt(int pos){//starts from 0 Node re=null; int index=0; Node node=head; while(node!=null){ if(index==pos){ return node; } node=node.next; index++; } return re; } } private static class Node{ int data; Node next; Node(int data){ this.data=data; } } public static void main(String[] args) { int[] data={0,1,2,3,4,5,6,7,8}; List list=new List(); list.createList(data); list.printList(); Node nodeToDelete=list.getNodeAt(8); deleteNode(list,nodeToDelete); nodeToDelete=list.getNodeAt(3); deleteNode(list,nodeToDelete); nodeToDelete=list.getNodeAt(0); deleteNode(list,nodeToDelete); list.printList();//1 2 4 5 6 7 list.createList(new int[]{1}); deleteNode(list,list.getNodeAt(0)); list.printList();//nothing. } }
public class ParameterTransfer { /** * 1.primitive type: pass by value * 2.reference type: you can change the paremeter's status,but you cannot set it null. */ public static void main(String[] args) { ParameterTransfer p = new ParameterTransfer(); TestData test = new TestData(1); p.setNull(test); System.out.println(test == null);// false--cannot set it null p.changeReference(test); System.out.println(test.i);//1--cannot change reference p.changeData(test); System.out.println(test.i);// 2--change its status } public void changeData(TestData test){ test.i=2; } public void setNull(TestData test) { test = null; return; } public void changeReference(TestData test) { TestData test2=new TestData(2); test = test2; return; } } class TestData { int i; TestData(int i) { this.i = i; } }
发表评论
-
百度笔试题:一个已经排序好的很大的数组,现在给它划分成m段,每段长度不定,段长最长为k,然后段内打乱顺序,请设计一个算法对其进行重新排序
2012-12-21 18:17 4102import java.util.Arrays; ... -
java-56-动态规划-最长公共子序列
2012-03-12 00:14 2976http://zhedahht.blog.163.com/bl ... -
java-57-用两个栈实现队列&&用两个队列实现一个栈
2012-03-11 11:25 10804import java.util.ArrayList; ... -
java-26-左旋转字符串
2012-03-11 11:23 3085public class LeftRotateString ... -
java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶
2012-03-08 20:41 5003import java.util.Stack; pu ... -
java-54- 调整数组顺序使奇数位于偶数前面
2012-03-06 21:09 3702import java.util.Arrays; imp ... -
java-63-在字符串中删除特定的字符
2012-03-05 16:47 2335public class DeleteSpecific ... -
java-67-扑克牌的顺子.从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大
2012-03-05 15:46 6248package com.ljn.base; import ... -
java-68-把数组排成最小的数。一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的。例如输入数组{32, 321},则输出32132
2012-03-05 10:38 6193import java.util.Arrays; imp ... -
java-69-旋转数组的最小元素。把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素
2012-02-29 10:30 3539public class MinOfShiftedAr ... -
java-67- n个骰子的点数。 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。
2012-02-28 00:00 6452public class ProbabilityOfD ... -
java-71-数值的整数次方.实现函数double Power(double base, int exponent),求base的exponent次方
2012-02-27 21:43 3093public class Power { /* ... -
java-73-输入一个字符串,输出该字符串中对称的子字符串的最大长度
2012-02-27 16:14 5845public class LongestSymmtri ... -
java-75-二叉树两结点的最低共同父结点
2012-02-27 11:27 1553import java.util.LinkedList; ... -
java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
2012-02-11 10:56 2508public class OcuppyMoreThan ... -
java-17-在一个字符串中找到第一个只出现一次的字符
2012-02-11 10:04 5887public class FirstShowOnlyO ... -
java-50-输入两棵二叉树A和B,判断树B是不是A的子结构
2012-02-10 23:26 1982思路来自:http://zhedahht.blog.163.c ... -
java-51-输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
2012-02-10 10:55 4276public class PrintMatrixClo ... -
java-61-在数组中,数字减去它右边(注意是右边)的数字得到一个数对之差. 求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5,
2012-02-09 23:08 2234思路来自:http://zhedahht. ... -
java-37.有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接
2012-01-27 22:46 2330public class MaxCatenate { ...
相关推荐
通过上述方法,我们可以在 O(n) 的时间复杂度内找到并删除链表的倒数第 N 个结点。这种方法避免了两次遍历链表的过程,从而提高了算法的效率。快慢指针技巧在处理链表问题时非常实用,尤其是在需要找到特定位置的...
- 算法设计和分析,包括复杂度评估(时间复杂度为O(n^2),空间复杂度为O(1))。 通过解决这个问题,你可以提升自己的链表操作技巧,增强对排序算法的理解,同时锻炼到实际编程能力。在LeetCode上完成这类题目,对于...
1. 时间复杂度和空间复杂度分析:此算法的时间复杂度为O(N),因为每个节点最多被访问两次。空间复杂度为O(1),因为我们只使用了常数级别的额外空间。 2. 边界条件处理:如链表为空、N为0、N大于链表长度等特殊情况。...
这将使得时间复杂度降低到O(1),但会增加空间复杂度。 总结一下,查找链表中倒数第k个节点的问题主要考察了对链表数据结构的理解和操作,以及双指针算法的应用。`MyLinkList.java`文件中的实现可能包括了链表节点和...
由于链表没有像数组那样提供随机访问的能力,所以查找效率取决于链表的长度,时间复杂度为O(n)。 更新操作涉及到找到目标节点,修改其数据域,然后返回。同样,删除操作需要找到待删除节点,将其前一个节点的next...
- **链表**:相比之下,链表在插入或删除元素时只需修改相邻结点的指针即可完成操作,无需移动元素,效率更高。 #### 五、单链表 单链表是最简单的链表形式,其中每个结点包含一个指向下一个结点的指针。 - **...
在Java中,我们通常会创建一个`Node`类来表示链表节点,并定义一个`LinkedList`类来管理链表的操作,如插入、删除和查找节点。以下是关于查找链表头结点的详细知识点: 1. **链表的定义**: - 链表由一系列节点...
红黑树是一种自平衡二叉查找树,它可以在O(log n)时间内进行查找、插入和删除操作。红黑树的每个节点都包含一个键值对,并且节点的颜色只能是红色或黑色。红黑树的特点是: * 每个节点都是红色或黑色。 * 根节点是...
通过旋转操作保持树的平衡状态,从而保证了查找、插入和删除操作的时间复杂度为O(logn)。 #### 四、哈夫曼树 **1. 哈夫曼树定义** 哈夫曼树也称最优二叉树,是一种带权路径长度最短的二叉树,常用于数据压缩。其...
链表的主要优势在于插入和删除操作,特别是对于表头和中间位置的操作,其时间复杂度通常为O(1),但访问元素的速度比顺序表慢,因为需要遍历指针。链表有多种类型,包括单向链表、双向链表、带头结点和不带头结点的...
时间复杂度为O(max(m, n)),其中m和n分别是两个输入链表的长度,因为我们需要遍历最远到达的位置。空间复杂度主要取决于创建的新节点,为O(max(m, n))(忽略常数项)。 接下来,我们讨论“删除链表的倒数第n个节点...
- **时间复杂度**:该算法的时间复杂度为 O(n),其中 n 是二叉树中节点的数量。因为每个节点只被访问一次。 - **空间复杂度**:由于使用了递归,因此空间复杂度主要取决于递归栈的深度,最坏情况下为 O(h),h 是树的...
- 链式存储适合于插入和删除操作,时间复杂度为O(1)。 - **基于空间的比较** - 顺序存储需要预先分配固定大小的空间。 - 链式存储按需分配空间,但每个节点需要额外的指针空间。 **3.5 链接表** - **基于结点的...
总的来说,"职工信息链表文件版"项目涉及到C++中的链表和向量数据结构,以及文件I/O操作。通过这些知识,我们可以实现对职工信息的有效管理和持久化存储,同时利用向量的便利性进行数据处理。在实际开发中,还需要...