Leetcode—707.设计链表【中等】双链表的设计明天再写

2023每日刷题(十七)

Leetcode---707.设计链表

设计单链表实现代码

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


MyLinkedList* myLinkedListCreate() {
    MyLinkedList* mList = (MyLinkedList *)malloc(sizeof(MyLinkedList));
    mList->next = NULL;
    return mList;
}

int myLinkedListGet(MyLinkedList* obj, int index) {
    int j = 0;
    MyLinkedList* p = obj->next;
    if(index < 0) {
        return -1;
    }
    while(j < index && p != NULL) {
        j++;
        p = p->next;
    }
    if(p == NULL) {
        return -1;
    }
    return p->val;
}

void myLinkedListAddAtHead(MyLinkedList* obj, int val) {
    MyLinkedList* p = obj;
    MyLinkedList* s = (MyLinkedList *)malloc(sizeof(MyLinkedList));
    s->val = val;
    s->next = NULL;
    s->next = p->next;
    p->next = s;
}

void myLinkedListAddAtTail(MyLinkedList* obj, int val) {
    MyLinkedList* p = obj;
    MyLinkedList* q = p->next;
    while(q != NULL) {
        p = q;
        q = q->next;
    }
    MyLinkedList* s = (MyLinkedList *)malloc(sizeof(MyLinkedList));
    s->next = NULL;
    s->val = val;
    p->next = s;
}

void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) {
    MyLinkedList* s = (MyLinkedList *)malloc(sizeof(MyLinkedList));
    s->next = NULL;
    s->val = val;
    int j = 0;
    MyLinkedList* p = obj->next;
    // 记录前驱方便插入结点
    MyLinkedList* q = obj;
    while(j < index && p != NULL) {
        j++;
        q = p;
        p = p->next;
    }
    // index等于链表长度
    if(p == NULL && index == j) {
        q->next = s;
    } else if(p == NULL && index > j) {
        return;
    } else {
        q->next = s;
        s->next = p;
    }
}

void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) {
    int j = 0;
    MyLinkedList* p = obj->next;
    MyLinkedList* q = obj;
    while(j < index && p != NULL) {
        q = p;
        p = p->next;
        j++;
    }
    if(p != NULL) {
        q->next = p->next;
        free(p);
    }
}

void myLinkedListFree(MyLinkedList* obj) {
    MyLinkedList* pre = obj;
    MyLinkedList* p = pre->next;
    while(p != NULL) {
        free(pre);
        pre = p;
        p = pre->next;
    }
    free(pre);
}

/**
 * Your MyLinkedList struct will be instantiated and called as such:
 * MyLinkedList* obj = myLinkedListCreate();
 * int param_1 = myLinkedListGet(obj, index);
 
 * myLinkedListAddAtHead(obj, val);
 
 * myLinkedListAddAtTail(obj, val);
 
 * myLinkedListAddAtIndex(obj, index, val);
 
 * myLinkedListDeleteAtIndex(obj, index);
 
 * myLinkedListFree(obj);
*/

运行结果

设计双链表实现代码

运行结果

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

相关推荐
songx_9917 小时前
leetcode10(跳跃游戏 II)
数据结构·算法·leetcode
Yuki’17 小时前
网络编程---UDP
c语言·网络·网络协议·udp
.YM.Z17 小时前
C语言——文件操作
c语言·文件操作
先做个垃圾出来………18 小时前
差分数组(Difference Array)
java·数据结构·算法
hansang_IR18 小时前
【题解】洛谷 P4286 [SHOI2008] 安全的航线 [递归分治]
c++·数学·算法·dfs·题解·向量·点积
乐迪信息18 小时前
乐迪信息:AI摄像机在智慧煤矿人员安全与行为识别中的技术应用
大数据·人工智能·算法·安全·视觉检测
GanGuaGua18 小时前
Linux系统:线程的互斥和安全
linux·运维·服务器·c语言·c++·安全
多恩Stone19 小时前
【3DV 进阶-2】Hunyuan3D2.1 训练代码详细理解下-数据读取流程
人工智能·python·算法·3d·aigc
AIGC小火龙果19 小时前
OpenAI的开源王牌:gpt-oss上手指南与深度解析
人工智能·经验分享·gpt·搜索引擎·aigc·ai编程
dragoooon3419 小时前
[数据结构——lesson5.1链表的应用]
数据结构·链表