题目: 复杂链表的复制?
描述:
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,
另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。
(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
<?php
/*class RandomListNode{
var $label;
var $next = NULL;
var $random = NULL;
function __construct($x){
$this->label = $x;
}
}*/
function MyClone($pHead)
{
if($pHead == null)
return null;
$head = new RandomListNode($pHead->label);
$tmp = $head;
while($pHead != null){
$tmp->label = $pHead->label;
$tmp->next = $pHead->next;
$tmp->random = $pHead->random;
$pHead = $pHead->next;
$tmp = $tmp->next;
}
return $head;
}
题目: 二叉搜索树与双向链表
描述:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
要求不能创建任何新的结点,只能调整树中结点指针的指向。
<?php
/*class TreeNode{
var $val;
var $left = NULL;
var $right = NULL;
function __construct($val){
$this->val = $val;
}
}*/
function Convert($pRootOfTree)
{
$root = $pRootOfTree;
if(!$root){
return NULL;
}
if(!$root->left && !$root->right){
return $root;
}
//left指向比自己小的 right指向比自己大的
$left = Convert($root->left);
$tmp = $left;
while($tmp && $tmp->right){
$tmp = $tmp->right;
}
if($left){
$root->left = $tmp;
$tmp->right = $root;
}
$right = Convert($root->right);
if($right){
$root->right = $right;
$right->left = $root;
}
return $left?$left:$root;
}