- 浏览: 793082 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
萨琳娜啊:
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 CopySpecialLinkedList { /** * 题目:有一个特殊的链表,其中每个节点不但有指向下一个节点的指针pNext,还有一个指向链表中任意节点的指针pRand,如何拷贝这个特殊链表? 拷贝pNext指针非常容易,所以题目的难点是如何拷贝pRand指针。 假设原来链表为A1 -> A2 ->... -> An,新拷贝链表是B1 -> B2 ->...-> Bn。 为了能够快速的找到pRand指向的节点,并把对应的关系拷贝到B中。我们可以将两个链表合并成 A1 -> B1 -> A2 -> B2 -> ... -> An -> Bn。 从A1节点出发,很容易找到A1的pRand指向的节点Ax,然后也就找到了Bx,将B1的pRand指向Bx也就完成了B1节点pRand的拷贝。依次类推。 当所有节点的pRand都拷贝完成后,再将合并链表分成两个链表就可以了。 */ public static void main(String[] args) { int[] data = { 1, 2, 3, 4, 5 }; SpecialLinkList sList = new SpecialLinkList(); SpecialLinkList.Node source = sList.create(data); sList.pRand(0, 4);//add 'pRand' sList.pRand(1, 3); sList.pRand(2, 0); sList.pRand(3, 2); sList.pRand(4, 1); sList.print(source); SpecialLinkList.Node dest = sList.copyPNext(source); sList.copyPRand(dest, source); sList.print(dest); } } class SpecialLinkList { private Node head; class Node { int val; Node pNext; Node pRand; Node(int val) { this.val = val; } } public Node copyPNext(Node source) { Node pre = null;// previous node Node dest = null;// destination node while (source != null) { int val = source.val; Node cur = new Node(val);// current node if (pre == null) { pre = cur; dest = pre; } else { pre.pNext = cur; pre = cur; } source = source.pNext; } return dest; } public Node copyPRand(Node dest, Node source) { Node a = source; Node b = dest; // create a1-b1-a2-b2... while (a != null && b != null) { Node tmp = a.pNext; a.pNext = b; a = b; b = tmp; } // copy pRand a = source; b = a.pNext; while (a.pNext != null) { Node tmp = a.pNext.pNext; b.pRand = a.pRand.pNext; if (tmp == null) { break; } a = tmp; b = a.pNext; } // split a1-b1-a2-b2... to a1-a2...,b1-b2.... a = source; b = source.pNext; dest = b; while (a.pNext.pNext != null) { Node tmp = a.pNext.pNext; a.pNext = tmp; a = tmp; tmp = b.pNext.pNext; b.pNext = tmp; b = tmp; } a.pNext = null; b.pNext = null; return dest; } // create a linked list.Insert from tail. public Node create(int[] data) { if (data == null || data.length == 0) { return null; } Node tail = null; for (int len = data.length, i = len - 1; i >= 0; i--) { Node tmp = new Node(data[i]); tmp.pNext = tail; tail = tmp; } head = tail; return head; } // create 'pRand' between posX and posY public void pRand(int posX, int posY) { if (posX < 0 || posY < 0) { return; } Node nodeX = getNodeAt(posX); Node nodeY = getNodeAt(posY); if (nodeX != null && nodeY != null) { nodeX.pRand = nodeY; } } // get the node at the specific position.The position starts from 0. public Node getNodeAt(int pos) { if (pos < 0) { return null; } if (head == null) { return null; } Node node = head; while (node != null && pos > 0) { node = node.pNext; pos--; } return node; } //print the special linked list,like 1(5)-2(4)-3(1)-4(3)-5(2).'5' is the pRand of '1',and so on. public void print(Node node) { while (node != null) { System.out.print(node.val + ""); if (node.pRand != null) { System.out.print("(" + node.pRand.val + ")-"); } node = node.pNext; } System.out.println(); } }
发表评论
-
二维数组(矩阵)对角线输出
2014-04-28 17:55 4737/** 二维数组 对角线输出 两个方向 例如对于数 ... -
bitmap求哈密顿距离-给定N(1<=N<=100000)个五维的点A(x1,x2,x3,x4,x5),求两个点X(x1,x2,x3,x4,x5)和Y(
2012-12-27 21:12 3000import java.util.Random; / ... -
百度笔试题:一个已经排序好的很大的数组,现在给它划分成m段,每段长度不定,段长最长为k,然后段内打乱顺序,请设计一个算法对其进行重新排序
2012-12-21 18:17 4133import java.util.Arrays; ... -
有一个数组,每次从中间随机取一个,然后放回去,当所有的元素都被取过,返回总共的取的次数。写一个函数实现。复杂度是什么。
2012-12-07 14:32 3636import java.util.Random; i ... -
单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值
2012-11-11 22:32 2387import java.util.LinkedList; ... -
据说是2012年10月人人网校招的一道笔试题-给出一个重物重量为X,另外提供的小砝码重量分别为1,3,9。。。3^N。 将重物放到天平左侧,问在两边如何添加砝码
2012-10-28 23:41 1994public class ScalesBalance { ... -
java-并查集(Disjoint-set)-将多个集合合并成没有交集的集合
2012-04-28 00:02 8463import java.util.ArrayList; ... -
java-写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。
2012-04-17 19:50 3498public class CommonSubSeque ... -
java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
2012-04-14 15:39 2335public class PC { /** ... -
java-两整数相除,求循环节
2012-04-14 13:52 4680import java.util.ArrayList; ... -
java-颠倒一个句子中的词的顺序。比如: I am a student颠倒后变成:student a am I
2012-04-14 10:27 4014public class ReverseWords { ... -
java-谷歌面试题-给定一个排序数组,如何构造一个二叉排序树
2012-04-12 11:10 4404import java.util.LinkedList; ... -
java-谷歌面试题-设计方便提取中数的数据结构
2012-04-12 10:10 2169网上找了一下这道题的解答,但都是提供思路,没有提供具体实现。其 ... -
java-腾讯暑期实习生-输入一个数组A[1,2,...n],求输入B,使得数组B中的第i个数字B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]
2012-04-08 23:10 3802这道题的具体思路请参看 何海涛的微博:http://weibo ... -
java-给定两个已排序序列,找出共同的元素。
2012-04-06 13:09 2871import java.util.ArrayList; ... -
java-谷歌面试题-给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数
2012-03-31 12:16 5051public class SearchInShifte ... -
java-13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。
2012-03-28 22:13 1565import java.util.ArrayList; ... -
java-给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。
2012-03-26 10:59 7689public class DeleteExtraSpa ... -
java实现两个大数相加,可能存在溢出。
2012-03-25 11:08 6728import java.math.BigInteger; ... -
给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
2012-03-21 22:15 3772import java.util.ArrayList; ...
相关推荐
每个元素称为节点,包含两部分:数据域和指针域,指针域指向下一个节点。链表的主要操作包括插入、删除、遍历等。 在MFC中实现链表,我们需要创建一个表示学生数据的类,如`CStudent`,包含学生的基本信息,如姓名...
`:指向下一个节点。 - 方法包括: - 构造函数和拷贝构造函数。 - `void InputData(CData *pdata);`:设置节点中的数据。 - `void ShowNode();`:显示节点信息。 - `CData *GetData();`:获取节点数据。 3. **...
每个节点包含一个指向`CSalary`对象的指针`pData`以及指向下一个节点的指针`pNext`。`CNode`类还包含了以下成员函数: 1. 默认构造函数:初始化`pData`和`pNext`为NULL。 2. 拷贝构造函数:用于复制节点的数据和...
2. `pnext`:指向下一个节点的指针,用于构建链表结构。 3. `inputdata(CData *pd)`:设置节点的`pdata`指向给定的学生数据。 4. `shownode()`:显示当前节点中的学生数据。 5. `getdata()`:获取当前节点中的学生...
每个`CNode`包含一个指向`CData`对象的指针`pdata`和一个指向下一个节点的指针`pnext`。`CNode`类还包括一个构造函数,用于初始化这些指针,以及一个拷贝构造函数来复制节点的数据。`inputdata`函数用于设置节点的...
5. **节点(Node)**:`CNode`类代表链表中的一个节点,包含一个指向`CData`对象的指针`pdata`和一个指向下一个节点的指针`pnext`。它还包含了复制构造函数,用于节点的深拷贝。 6. **链表(Linked List)**:`...
它维护了三个指针:`pNext`指向下一个节点,`pPrev`记录前一个节点,`pCur`指向当前节点。每次循环都将当前节点的`next`指向前一个节点,从而逐步构建反转后的链表结构。最后更新`head`指针指向新的头节点。 ### 6....
其中红色部分巧妙的利用指向指针的指针为指针puc_card_config_tab赋值,而在兰色部分使用该指针。但在Get_Config_Table函数中有可能失败返回而不给该指针赋值。因此,以后使用的可能是一个非法指针。 指针的使用是...