题解 | 【模板】链表

【模板】链表

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

#include <stdio.h>
#include <stdlib.h>
typedef struct lian {
    int data;
    struct lian* next;
} lian;
lian* create() {
    lian* new = (lian*)malloc(sizeof(lian));
    // new.data=data;
    new->next = NULL;
    return new;
}
lian* insert(lian* head, int x, int y) {
    lian* a = create();
    a->data = y;
    lian* temp = head;
    lian* pre = NULL;
    if (head == NULL) {
        //head ->data= y;
        return a;
    }
    if(head->data==x){
        head=a;
        a->next=temp;
        return head;
    }
    while (temp != NULL && temp->data != x) {
        pre = temp;
        temp = temp->next;
    }
    if (temp != NULL) {
        pre->next = a;
        a->next = temp;
    }
    if (temp == NULL) {
        pre->next = a;
    }
    return head;
}
lian* delete (lian* head, int x) {
    lian* temp = head;
    lian* pre = NULL;
    if (head == NULL) {
        return head;
    }
    if(head->data==x){        
        head=head->next;
        return head;
    }
    while (temp->data != x&&temp!=NULL) {
        pre=temp;
        temp = temp->next;
    }
    if(temp!=NULL){
        pre->next=temp->next;
        free (temp);
    }
    return head;
}
int main() {
    int n;
    int x, y;
    char s[6];
    scanf("%d", &n);
    lian* head = NULL;


    for (int i = 0; i < n; i++) {
        scanf("%s", s);
        if (s[0] == 'i') {
            scanf("%d %d", &x, &y);
            head=insert(head, x, y);
        }
        if (s[0] == 'd') {
            scanf("%d", &x);
            head=delete (head, x);
        }
    }
    lian* temp = head;
    lian* next=NULL;
    if (head== NULL) {
        printf("NULL");
    } else {
        while (temp != NULL) {
            printf("%d ", temp->data);
            next=temp->next;
            free(temp);
            temp=next;
        }
    }
    
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务