算法

链表反转

struct Node * p = [self constructList];
    //反转后的链表头部
    struct Node * newH = NULL;
    //头插法
    while (p != NULL) {
        //记录下一个结点
        struct Node * temp = p->next;
        //当前结点的next指向新链表的头部
        p->next = newH;
        //更改新链表头部为当前结点
        newH = p;
        //移动p到下一个结点
        p = temp;
    }

https://www.jianshu.com/p/d0e5cb64d7d7
// 排序算法
https://www.jianshu.com/p/65a742412b91

二叉树反转

-(Tree*)chage:(Tree* treeIn){

    if (treeIn==NULL)
        return treeIn;
        // 
    Tree *treeOut = treeIn;
    
    // 递归处理 左右子树
       // 可以判断下左右子树
    treeOut.left = [self change:treeOut.left];
    treeOut.right = [self change:treeOut.right];
    
    // 左右子树交换
    Tree *temp = treeOut.left;
    treeOut.left = treeOut.right;
    treeOut.right = temp;
    
    return treeOut;
}

合并有序数组

    public void merge(int nums1 [], int m, int nums2 [], int n){
        int i = m-1, j = n-1, k = m+n-1;
        while(i>=0 && j>=0){
            if(nums1[i] > nums2[j])
                nums1[k--] = nums1[i--];
            else
                nums1[k--] = nums2[j--];     
        }
        while(j>=0){
            nums[k--] = nums[j--];
        }  
    }  

你可能感兴趣的:(算法)