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);
*/

运行结果

设计双链表实现代码

运行结果

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

相关推荐
§ꦿCFོ༉2 小时前
嵌入式八股—C语言入门学习(一)
c语言·编程语言·嵌入式八股文
w_zero_one3 小时前
递归算法(一)
java·开发语言·算法
圣保罗的大教堂3 小时前
leetcode 3736. 最小操作次数使数组元素相等 III 简单
leetcode
文丑颜不良啊4 小时前
LeetCode1881~1990题目解析
java·leetcode
沐晓时光4 小时前
C语言入门,字符串和字符串函数知识讲解
c语言·开发语言
风影同志783245 小时前
20 个比特能装下多少行情?——实测拆解 Kronos 的 K 线分词器
算法
写的都是BUG5 小时前
APK 里的钥匙,一直就放在门口:聊聊加固真正该做什么
前端·算法
地平线开发者6 小时前
CLIP 的零样本分类:一组文本如何变成图像分类器?
算法
京东云开发者6 小时前
从“会生成”到“能生产”:萤火虫 AIGC 平台的 AI Infra 实践
算法·aigc·产品
youshi66686 小时前
PID——算法改进
算法