题目: 复杂链表的复制?
描述:
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,
另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的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;
}