zoukankan      html  css  js  c++  java
  • 链表的基本操作

    链表的基本操作


    • 节点结构体:

    typedef struct Node {
      int element;
      struct Node* next;
    } node;
    
    • 创建一个链表:

    node* createList() {
      node* head = (node*)malloc(sizeof(node));
      head->element = 0;
      head->next = NULL;
      return head;
    }
    

    把一个空的节点当作链表的头会让下面的操作更加容易实现.

    • 插入:

    void insert(int x, node* list) {
      node* current = (node*)malloc(sizeof(node));
      current->element = x;
      current->next = list->next;
      list->next = current;
    }
    

    若不是把一个空的节点当作链表的头,则我们要传进的参数将会是
    (int x, node** list),而现在我们只需要修改list->next就可以把新增节点插入链表头.

    • 删除:

    void del(int x, node* list) {
      node* ptr = list;
    
      // 找到要删除节点的前一个节点
      while (ptr->next != NULL && ptr->next->element != x)
        ptr = ptr->next;
    
      // 如果找不到则返回
      if (ptr->next == NULL)
        return;
    
      // 找到后删除
      node* current = ptr->next;
      ptr->next = current->next;
      free(current);
    }
    
    • 查找:

    node* find(int x, node* list) {
      node* ptr = list->next;
    
      while (ptr != NULL && ptr->element != x)
        ptr = ptr->next;
    
      return ptr;
    }
    
    • 逆序

    void reverse(node* list) {
      node* head = list->next;
      node* temp = NULL;
      
      // 链表不为空
      if (head != NULL) {
        // 第二个node
        node* current = head->next;
        
        // 第一个node将作为尾节点,故指向NULL
        head->next = NULL;
        
        while (current != NULL) {
          temp = current->next;
          current->next = list->next;
          list->next = current;
          current = temp;
        }
      }
    }
    
    
  • 相关阅读:
    ReactNative 打包 APK
    ReactNative常用命令
    ReactNative之坑:停在gradle一直出点
    Python搭建Web服务器,与Ajax交互,接收处理Get和Post请求的简易结构
    tensorflow 安装升级
    sqlserver 全库查询 带架构
    气象数据资料整理
    poj2841
    cf1430e
    cf1436d
  • 原文地址:https://www.cnblogs.com/bgmind/p/3982657.html
Copyright © 2011-2022 走看看