美文网首页
数据结构与算法

数据结构与算法

作者: reboot_q | 来源:发表于2020-04-28 17:42 被阅读0次

动态数组: 开辟销毁内存空间的次数相对比较少, 但可能造成内存空间浪费;
双向链表: 开辟销毁内存空间的次数相对较多, 但不会造成内存空间浪费.

  1. 链表翻转
    面试题24. 反转链表
// O(n)
struct ListNode* reverseList(struct ListNode* head){
    if (head == NULL || head->next == NULL) {
        return head;
    }
    struct ListNode *newHead = NULL;
    while (head) {
        struct ListNode *temp = head->next;
        head->next = newHead;
        newHead = head;
        head = temp;
    }
    return newHead;
}

// 递归 - O()
struct ListNode* reverseList(struct ListNode* head){
    if (head == NULL || head->next == NULL) {
        return head;
    }
    struct ListNode *newHead = reverseList(head->next);
    head->next->next = head;
    head->next = NULL;

    return newHead;
}
  1. 快慢指针
    141. 环形链表
bool hasCycle(struct ListNode *head) {
    if (head == NULL || head->next == NULL) {
        return false;
    }
    struct ListNode *slow = head;
    struct ListNode *fast = head->next;
    while (fast && fast->next) {
        if (slow == fast) {
            return true;
        }
        slow = slow->next;
        fast = fast->next->next;
    }
    return false;
}
  1. 删除链表中的节点
void deleteNode(struct ListNode* node) {
    node->val = node->next->val;
    node->next = node->next->next;
}
  1. 203. 移除链表元素
// 哨兵节点法
struct ListNode* removeElements(struct ListNode* head, int val){
    struct ListNode *sentinelNode = malloc(sizeof(struct ListNode));
    sentinelNode->next = head;
    struct ListNode *curr = head;
    struct ListNode *prev = sentinelNode;

    while (curr) {
        if (curr->val == val) {
            prev->next = curr->next;
        } else {
            prev = curr;
        }
        curr = curr->next;
    }

    return sentinelNode->next;
}
  1. 83. 删除排序链表中的重复元素
struct ListNode * deleteDuplicates(struct ListNode* head) {
    struct ListNode *sential = malloc(sizeof(struct ListNode));
    sential->next = head;

    struct ListNode *pre = sential;
    struct ListNode *curr = head;

    while (curr && curr->next) {
        if (curr->val == curr->next->val) {
            pre->next = curr->next;
        } else {
            pre = curr;
        }
        curr = curr->next;
    }
    return sential->next;
}

栈(stack)
LIFO(last in first out)
push pop

队列(queue)
FIFO - 基于双向列表实现

相关文章

  • 数据结构与算法 - 查找

    数据结构与算法系列文章数据结构与算法 - 时间复杂度数据结构与算法 - 线性表数据结构与算法 - 树形结构数据结构...

  • 思维导图之数据结构+算法

    数据结构+算法 = 程序 数据结构比较 参考文章 数据结构与算法数据结构与算法(java)

  • 数据结构与算法 - 树形结构

    数据结构与算法系列文章数据结构与算法 - 时间复杂度数据结构与算法 - 线性表数据结构与算法 - 树形结构 目录 ...

  • 最新完整数据结构与算法

    最新完整数据结构与算法 P11_课程介绍 P22_数据结构与算法概述_数据结构 P33_数据结构与算法概述_算法 ...

  • 数据结构与算法

    数据结构与算法之美 数据结构与算法之美1--如何学数据结构与算法之美2--复杂度分析(上)数据结构与算法之美3--...

  • 算法与数据结构(1),List

    算法与数据结构(1),List 算法与数据结构(2),Map 算法与数据结构(3),并发结构 习惯了,深夜更新博客...

  • 数据结构与算法-目录

    数据结构与算法-目录 C语言篇 数据结构和算法-C语言篇1-绪论数据结构和算法-C语言篇2-初识算法数据结构与算法...

  • 算法与数据结构(3),并发结构

    算法与数据结构(1),List 算法与数据结构(2),Map 算法与数据结构(3),并发结构 本来已经合上电脑了,...

  • 算法与数据结构(2),Map

    算法与数据结构(1),List 算法与数据结构(2),Map 算法与数据结构(3),并发结构 睡了不到六个小时,被...

  • 数据结构与算法

    参考链接:算法 数据结构与算法 iOS数据结构 和 算法 上 算法 1、数据结构: 集合结构: 线性结构: 树形结...

网友评论

      本文标题:数据结构与算法

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