王道考研数据结构链表习题1-16

3 阅读1分钟

一、删除所有指定值的结点

核心代码check_tt()函数:


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int a[20], n;
typedef struct LNode {
    int data;
    struct LNode *next;
}LNode, *LinkList;

void insert(LinkList &t, int len, int d[]) {
    LNode* r = t;
    for(int i = 0; i < len; i ++) {
        LNode* p = (LNode*)malloc(sizeof(LNode));
        p -> data = d[i];
        r -> next = p;
        r = p;
    }
}

void print_tt(LinkList &t) {
    for(LNode* p = t; p -> next != NULL; p = p->next) {
        if(p -> next -> data < -100 || p-> next -> data > 100) break;
        printf("%d\n", p->next->data);
    }
}

void check_tt(LinkList &t, int val) {
    for(LNode *p = t; p -> next != NULL;) {
        if(p -> next -> data < -100 || p-> next -> data > 100) break;
        if(p -> next -> data == val) {
            LNode* q = p -> next;
            p -> next = p -> next -> next;
            free(q);
        } else {
            p = p -> next;
        }
    }
}

int main(){
    LinkList L = (LNode*)malloc(sizeof(LNode));
    scanf("%d", &n);
    for(int i = 0; i < n; i ++) {
        int da; scanf("%d", &da);
        a[i] = da;
    }
    insert(L, n, a);
    check_tt(L, 6);
    print_tt(L);
    return 0;
}

二、删除最小结点

核心代码check_tt()函数:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int a[20], n;
typedef struct LNode {
    int data;
    struct LNode *next;
}LNode, *LinkList;

void insert(LinkList &t, int len, int d[]) {
    LNode* r = t;
    for(int i = 0; i < len; i ++) {
        LNode* p = (LNode*)malloc(sizeof(LNode));
        p -> data = d[i];
        r -> next = p;
        r = p;
    }
}

void print_tt(LinkList &t) {
    for(LNode* p = t; p -> next != NULL; p = p->next) {
        if(p -> next -> data < -100 || p-> next -> data > 100) break;
        printf("%d\n", p->next->data);
    }
}

LNode* check_tt(LinkList &t) {
    LNode* pre = t;
    for(LNode* p = t; p -> next != NULL; p = p -> next) {
        if(p -> next -> data < -100 || p-> next -> data > 100) break;
        if(p -> next -> data < pre -> next -> data) {
            pre = p;
        }
    }
    return pre;
}

int main(){
    LinkList L = (LNode*)malloc(sizeof(LNode));
    scanf("%d", &n);
    for(int i = 0; i < n; i ++) {
        int da; scanf("%d", &da);
        a[i] = da;
    }
    insert(L, n, a);
    LNode *pp = check_tt(L);
    pp -> next = pp ->next -> next;
    print_tt(L);
    return 0;
}

三、逆序链表(空间复杂度O1)