链表的使用

链表

c 复制代码
typedef struct {
	int val;
    struct ListNode *next;
}ListNode;

初始化

c 复制代码
ListNode* InitListNode(int val){
    ListNode *a ;
    a = (ListNode *)malloc(sizeof(ListNode));
    a->next = NULL;
    a->val = val;
    return a;
}

插入

c 复制代码
//在a后面插入b
void insert(ListNode *a , ListNode *b)
{
    b->next = a->next;
    a->next = b;
}

删除

c 复制代码
//删除a后面的节点
void del( ListNode * a){
    if(!a->next) return ;
    ListNode * p = a->next;
    ListNode * n = p->next;
    a->next = n;
    free(p);
}

访问节点

c 复制代码
ListNode *access(ListNode *n,int index){
    for (int i=0;i<index;i++){
        if(n->next==NULL) return NULL;
        n=n->next;
    }
    return n;
}

查找

c 复制代码
int find(ListNode * node,int target){
    int index = 0;
    while(node){
        if(node->val == target) return index;
        node = node->next;
        index++;
    }
    reutrn -1;
}

双向链表

c 复制代码
typedef struct DoublyListNode{
   int val;
   struct DoublyListNode *prev;
   struct DoublyListNode *next;
} DoublyListNode;

初始化

c 复制代码
ListNode *newDoublyListNode(int val){
    DoublyListNode *node;
    node = (DoublyListNode *)malloc(sizeof(DoublyListNode));
    node->prev = NULL;
    node->next = NULL;
    node->val = val;
}

析构函数

c 复制代码
void delDoublyListNode(DoublyListNode *node){
    free(node);
}

寻找第i个节点

c 复制代码
DoublyListNode GetElem(DoublyListNode * node, int i){
    for(int j=0;j<i;j++){
        if(node->next == NULL){
            printf("i too large!!\n");
            return NULL;
        }
        node = node->next;
    }
    return node;
}

插入

c 复制代码
//s插入到n的前面
void find(DoublyListNode *n ,DoublyListNode *s){
    s->next = n->next->prev;
    s->prev = n;
    n->next->prev = s;
    n->next = s;
}

删除

c 复制代码
void delete(DoublyListNode *s){
    
    s->prev->next = s->next;
    s->next->prev = s->prev;
    free(s);
}
相关推荐
CHANG_THE_WORLD6 小时前
TCP 三次握手彻底解析:SYN、ACK、SEQ、确认号与状态迁移
网络·网络协议·tcp/ip
闪电悠米6 小时前
力扣hot100-56.合并区间-排序详解
数据结构·算法·leetcode·贪心算法·排序算法
DLYSB_7 小时前
基于 HTTP API 与 Modbus 协议的多源监控声光语音联动告警系统设计与实现
网络·网络协议·http·报警灯
Bobolink_8 小时前
手机端和电脑端的网络环境配置有什么不同?
网络·智能手机·电脑·网络环境
yuannl108 小时前
图的存储方式
数据结构
星恒讯工业路由器9 小时前
三大工业以太网协议选型对比
网络·物联网·ethercat·profinet·ethernet/ip·工业以太网协议
春卷同学9 小时前
HarmonyOS掌上记账APP开发实践第25篇:Image 组件高级用法 — 资源引用、网络图片与首字符占位方案
网络·华为·harmonyos
mounter6259 小时前
从内存隔离到运行时防线:透视 Linux 内核安全强化的博弈与演进
linux·网络·安全·linux kernel·kernel
会编程的小孩10 小时前
初识数据类型以及变量定义
数据结构·算法
梅梅绵绵冰10 小时前
数据结构-时间复杂度
数据结构·算法