25.复杂链表的复制

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

/*
public class RandomListNode {
int label;
RandomListNode next = null;
RandomListNode random = null; RandomListNode(int label) {
this.label = label;
}
}
*/
public class Solution {
public RandomListNode Clone(RandomListNode pHead)
{
//一定注意考虑输入为空链表的情况
if(pHead == null) return null;
//第一步:克隆每个结点的值和next,并且将新节点放置在对应旧结点之后
RandomListNode node = pHead;
while(node != null){
RandomListNode cloneNode = new RandomListNode(node.label);
//cloneNode.label = node.label;
cloneNode.next = node.next;
node.next = cloneNode;
node = cloneNode.next;
}
//第二步:克隆每个随机指针
node = pHead;
while(node != null){
RandomListNode cloneNode = node.next;
if(node.random != null)
cloneNode.random = node.random.next;
node = cloneNode.next;
}
//第三步:拆分拼接的链表
node = pHead;
RandomListNode cloneHead = pHead.next;
while(node != null){
RandomListNode cloneNode = node.next;
node.next = cloneNode.next;
node = node.next;
if(node != null)
cloneNode.next = node.next;
else
cloneNode.next = null;
}
return cloneHead;
}
}

26.二叉搜索树与双向链表

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null; public TreeNode(int val) {
this.val = val; } }
*/
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null) return null;
if(pRootOfTree.left == null && pRootOfTree.right == null) return pRootOfTree;
TreeNode left = Convert(pRootOfTree.left);
TreeNode node = left; if(node == null)
pRootOfTree.left = null;
else{
while(node.right != null)
node = node.right;
pRootOfTree.left = node;
node.right = pRootOfTree;
}
TreeNode right = Convert(pRootOfTree.right);
pRootOfTree.right = right;
if(right != null)
right.left = pRootOfTree;
return left != null ? left : pRootOfTree;
}
}

27.字符串的排列

题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Collections;
public class Solution {
ArrayList<String> result = new ArrayList<String>();
public ArrayList<String> Permutation(String str) {
if(str == null) return null;
char[] charArray = str.toCharArray();
permutation(charArray,0);
Collections.sort(result);
return result;
}
public void permutation(char[] charArray,int beginIdx){
if(beginIdx >= charArray.length) return;
if(beginIdx == charArray.length-1){
result.add(String.valueOf(charArray));
}
HashSet<Character> charSet = new HashSet<>();
for(int i = beginIdx;i<charArray.length;i++){
if(i == beginIdx){
charSet.add(charArray[i]);
permutation(charArray,beginIdx+1);
}else if(i != beginIdx && !charSet.contains(charArray[i])){
char temp = charArray[beginIdx];
charArray[beginIdx] = charArray[i];
charArray[i] = temp;
permutation(charArray,beginIdx+1);
temp = charArray[beginIdx];
charArray[beginIdx] = charArray[i];
charArray[i] = temp;
}
}
}
}

最新文章

  1. 打造自己的html5视频播放器
  2. diskpart查看硬盘序列号
  3. 谈谈Activiti中流程对象之间的关系
  4. 13、SQL基础整理(流程控制begin……end)
  5. Looksery Cup 2015 H. Degenerate Matrix 数学
  6. “WinMount”和“云端”真是相当好用!
  7. DataGridView的DataGridViewComboBoxColumn列点击一次,自动处于编辑状态
  8. Linear Regression(线性回归)(二)—正规方程(normal equations)
  9. webrtc aecd算法解析一(原理分析)
  10. 后台管理系统之“图片上传” --vue
  11. Java之Servlet
  12. [转] python 模块学习 hashlib
  13. StringBuilder String string.Concat 字符串拼接速度再议
  14. hud 1312
  15. [HDU 2520] 我是菜鸟,我怕谁(不一样的for循环)
  16. 【转】PowerDesigner删除外键关系,而不删除外键列
  17. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)
  18. 如何在一个js文件中引入另外的js文件
  19. JS、JQ实现焦点图轮播效果
  20. Linux驱动虚拟地址和物理地址的映射

热门文章

  1. Mysql基本命令二
  2. 选择结构if、switch
  3. Jenkins初识
  4. python中的time模块
  5. Yii AR中处理多表关联的relations配置
  6. RChain的Casper共识算法
  7. Android图像处理 - 高斯模糊的原理及实现
  8. bzoj 3509: [CodeChef] COUNTARI] [分块 生成函数]
  9. js中sum(2,3,4)和sum(2)(3)(4)都返回9并要求扩展性
  10. Windows Azure Virtual Network (11) 虚拟网络之间点对点连接VNet Peering