题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向 下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的 head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接 返回空)
思路:先复制链表的 next 节点,将复制后的节点接在原节点后,然后复制其它的 节点,最后取偶数位置的节点(复制后的节点)。
public class TreeNode {
TreeNode left;
TreeNode right;
int val;
TreeNode(int x){
val = x;
}
}
// 二叉搜索树转换为双向链表
//实现是中序遍历
public TreeNode Covert(TreeNode pRootofTree){
TreeNode lastList = coverNode(pRootofTree,null);
TreeNode pHead = lastList;
while (pHead!=null&&pHead.left!=null){
pHead = pHead.left;
}
return pHead;
}
//中序遍历出来是有序的
public TreeNode coverNode(TreeNode root,TreeNode lastList){
if(root == null){
return null;
}
//根节点 作为基本节点
TreeNode cur = root;
//根的左子树
if(cur.left!= null){
lastList = coverNode(cur.left,lastList);
}
//指向左节点
cur.left = lastList;
//如果没有左节点 则为右倾树
if(lastList!=null){
lastList.right = cur;
}
//重新指向,根节点
lastList = cur;
//根的右子树
if(cur.right!=null){
lastList = coverNode(cur.right,lastList);
}
//返回中序后的树节点
return lastList;
}