美文网首页
算法合集

算法合集

作者: _Henry_ | 来源:发表于2017-04-17 16:45 被阅读0次

链表反转

方法1. 迭代。 分别设置三个指针。第一个指针保持结果,第二个指针指向当前的节点,第三个指针保存下一个节点。
/* 反转单链表. 分别用3个指针,指向前一个,当前,下一个 */

static void reverse(struct node** head_ref)
{
    struct node* prev   = NULL;
    struct node* current = *head_ref;
    struct node* next;
    while (current != NULL)
    {
        next  = current->next;
        current->next = prev;
        prev = current;
        current = next;
    }
    *head_ref = prev;
}

方法2:使用递归。
/* 使用递归的方法 */

static struct node * reverseRecall(struct node* head){
    //最后一个节点会返回 作为头部
    if(NULL == head || head->next == NULL) return head;
    //head->next 表示剩下的部分
    struct node * newHead = reverseRecall(head->next);
    head->next->next = head; //颠倒指针
    head->next = NULL;//原来的头节点 next 应该为空
    return newHead;
}

链表中倒数第k个结点

方法1.走到尾端后回溯(不推荐)。
方法2.两个指针,第一个先走k步,之后同时走。注意判断第一个走完的情况。

调整数组顺序使奇数位于偶数前面

方法
Step1.第一个指针初始化时指向数组的第一个数字,它只向后移动;
  Step2.第二个指针初始化时指向数组的最后一个数字,它只向前移动。
  Step3.在两个指针相遇之前,第一个指针总是位于第二个指针的前面。如果第一个指针指向的数字是偶数,并且第二个指针指向的数字是奇数,我们就交换这两个数字。

public static void ReorderOddEven(int[] datas)
    {
        if (datas == null || datas.Length <= 0)
        {
            return;
        }

        int begin = 0;
        int end = datas.Length - 1;
        int temp = -1;

        while (begin < end)
        {
            // 向后移动begin,直到它指向偶数
            while (begin < end && datas[begin] % 2 != 0)
            {
                begin++;
            }
            // 向前移动pEnd,直到它指向奇数
            while (begin < end && datas[end] % 2 == 0)
            {
                end--;
            }

            if (begin < end)
            {
                // 交换偶数和奇数
                temp = datas[begin];
                datas[begin] = datas[end];
                datas[end] = temp;
            }
        }
    }

未完待续。。。

相关文章

  • 12月,献上的12本Java架构师必读书籍

    经典算法谜题的合集Google、Facebook等一流IT公司算法面试必备 《算法谜题》是经典算法谜题的集结。它列...

  • 算法合集

    链表反转 方法1. 迭代。 分别设置三个指针。第一个指针保持结果,第二个指针指向当前的节点,第三个指针保存下一个节...

  • 算法合集

    JavaScript版数据结构与算法 javascript反转字符串中的单词JavaScript计数二进制子串Ja...

  • 排序算法合集

    排序算法汇总 各类排序算法时间空间复杂度如下表所示: 1:直接选择排序: 排序思想: 选取当前最小(最大)的数据放...

  • IOS 算法合集

    这里用来总结记录所有算法(大部分Swift) 中级篇IOS 算法(中级篇) ----- 三数之和求解问题[http...

  • 计步算法库的使用方式

    欢迎Follow我的GitHub, 欢迎关于计步算法库的算法原理与使用方法. 本文的合集已经编著成书,高级Andr...

  • 算法进阶---书单合集

    如果你想成为一个码农或是熟练工(Code Monkey),你大可以不学算法,因为算法对你确实没有用;但如果你想成为...

  • 排序算法大合集

    基本概念 排序的稳定性任意两个相等的数据,排序前后相对位置不发生改变 题目 给定N个(长整型范围内的)整数,要求输...

  • 各种排序算法合集

    合集 插入排序 1.直接插入排序 思想:每次将一个待排序的数据按照其数值大小插入到前面已经排序好的数据中的适当位置...

  • 算法合集-持续更新

    选择排序(Selection Sort) 它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始...

网友评论

      本文标题:算法合集

      本文链接:https://www.haomeiwen.com/subject/ejwtzttx.html