题解 | #【模板】链表#

【模板】链表

https://www.nowcoder.com/practice/97dc1ac2311046618fd19960041e3c6f

链表基础题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
struct ListNode {
    int data;
    struct ListNode* next;
};

struct ListNode* insert(struct ListNode* listnode, int x, int y) {
    struct ListNode* pre = listnode;
    struct ListNode* ln = listnode->next;
    while (ln != NULL) {
        if (ln->data != x) {
            pre = ln;
            ln = ln->next;
        } else break;
    }
    struct ListNode* temp = (struct ListNode*)malloc(sizeof(struct ListNode));
    temp->data = y;
    pre->next = temp;
    temp->next = ln;
    return listnode;
}

struct ListNode* delete (struct ListNode* listnode, int x) {
    struct ListNode* pre = listnode;
    struct ListNode* ln = listnode->next;
    while (ln != NULL) {
        if (ln->data != x) {
            pre = ln;
            ln = ln->next;
        } else break;
    }
    if (ln == NULL) return listnode;
    else {
        pre->next = ln->next;
        struct ListNode* temp = ln;
        free(temp);
    }
    return listnode;
}

int main() {
    int n;
    //初始化
    struct ListNode* listnode = (struct ListNode*)malloc(sizeof(struct ListNode));
    //有头节点方便操作
    listnode->next = NULL;
    scanf("%d", &n);
    char opt[8];
    for (int i = 0; i < n; i++) {
        scanf("%s", opt);
        //insert
        if (!strcmp(opt, "insert")) {
            int x, y;
            scanf("%d %d", &x, &y);
            listnode = insert(listnode,x,y);
//delete
        } else {
            int x;
            scanf("%d",&x);
            listnode = delete(listnode,x);
        }
    }
    //输出
    if(listnode->next == NULL) printf("NULL");
    else{
        while(listnode->next != NULL){
            printf("%d ",listnode->next->data);
            listnode = listnode->next;
        }
    }
    return 0;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务