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

运行结果

设计双链表实现代码

运行结果

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

相关推荐
დ旧言~几秒前
【高阶数据结构】图论
算法·深度优先·广度优先·宽度优先·推荐算法
时光の尘几秒前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
张彦峰ZYF5 分钟前
投资策略规划最优决策分析
分布式·算法·金融
-一杯为品-10 分钟前
【51单片机】程序实验5&6.独立按键-矩阵按键
c语言·笔记·学习·51单片机·硬件工程
The_Ticker21 分钟前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
Lenyiin1 小时前
02.06、回文链表
数据结构·leetcode·链表
爪哇学长1 小时前
双指针算法详解:原理、应用场景及代码示例
java·数据结构·算法
爱摸鱼的孔乙己1 小时前
【数据结构】链表(leetcode)
c语言·数据结构·c++·链表·csdn
Dola_Pan1 小时前
C语言:数组转换指针的时机
c语言·开发语言·算法
繁依Fanyi1 小时前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse