现在的位置: 首页 > 综合 > 正文

算法3

2018年02月12日 ⁄ 综合 ⁄ 共 1474字 ⁄ 字号 评论关闭

1、反转一个单链表

public static Node reverse(Node head)  
{  
    if (null == head)  
    {  
        return head;  
    }  
    Node pre = head;  
    Node cur = head.getNextNode();  
    Node next;  
    while (null != cur)  
    {  
        next = cur.getNextNode();  
        cur.setNextNode(pre);  
        pre = cur;  
        cur = next;  
    }  

    // 将原链表的头节点的下一个节点置为null,再将反转后的头节点赋给head  
    head.setNextNode(null);  
    head = pre;  

    return head;  
}

2、求一个给定二叉树上两个节点a,b的最近公共父节点

TreeNode FindFirstCommonParentNode(TreeNode pRoot, TreeNode pNodeOne, TreeNode pNodeTwo)
{
    if (NULL == pRoot)
    {
        return NULL;
    }
    if (pRoot == pNodeOne || pRoot == pNodeTwo)
    {
        return pRoot;
    }
    
    TreeNode pLeft = FindFirstCommonParentNode(pRoot.left(), pNodeOne, pNodeTwo);
    TreeNode pRight = FindFirstCommonParentNode(pRoot.right(), pNodeOne, pNodeTwo);

    if (NULL == pLeft)       //1、左子树没有找到任何一个结点,则第一个公共父节点必定在右子树,而且找到第一个结点就是最低共同父节点
    {
        return pRight;
    }
    else if (NULL == pRight) //2、右子树没有找到任何一个结点,则第一个公共父节点必定在左子树,而且找到第一个结点就是最低共同父节点
    {
        return pLeft;
    }
    else                     //3、分别在结点的左右子树找到,则此节点必为第一个公共父节点
    {
        return pRoot;
    }
}

3、中文转数字,例如三万五千四百二十-->35420

public static long parse(String money) {
        long result = 0;
        char c = 0;
 
        boolean flag = Pattern.matches("^.*亿.*万.*$", money);
 
        for (int i = 0; i < money.length(); i++) {
            switch (money.charAt(i)) {
            case '零':
                break;
            case '一':
                c = 1;
                break;
            case '二':
                c = 2;
                break;
            case '三':
                c = 3;
                break;
            case '四':
                c = 4;
                break;
            case '五':
                c = 5;
                break;
            case '六':
                c = 6;
                break;
            case '七':
                c = 7;
                break;
            case '八':
                c = 8;
                break;
            case '九':
                c = 9;
                break;
            case '十':
                result += (c == 0 ? 10 : c * 10);
                c = 0;
                break;
            case '百':
                result += c * 100;
                c = 0;
                break;
            case '千':
                result += c * 1000;
                c = 0;
                break;
            case '万':
                result = (result + c) * 10000;
                c = 0;
                break;
            case '亿':
                if (flag){
                    result = (result + c) * 10000;
                }else{
                    result = (result + c) * 100000000;
                }
                c = 0;
                break;
            default:
                c = 0;
            }
 
        }
        if (c != 0)
            result += c;
        return result;
 
    }

抱歉!评论已关闭.