编辑代码

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef int LinkedList;

typedef struct SLinkedListNode{
    LinkedList data;
    struct SLinkedListNode * next;
} Node;

void SLinkedListPrint(Node * prist){
    Node *cur = prist;
    while(cur!= NULL){
        printf("%d->",cur->data);
        cur = cur -> next;
    }
    printf("NULL\n");

}

void SLinkedlistPushEnd(Node ** prist , LinkedList x){
    Node * newnode = (Node*)malloc(sizeof(Node));
    newnode->data = x;
    newnode->next = NULL;
    if(*prist == NULL){
        *prist = newnode;
    }
    else
    {   
        Node *cur = *prist;
        while(cur->next !=NULL){
            cur = cur->next;
        }
        cur->next = newnode;
    }
}

Node * CreatNode(LinkedList x){
    Node * newnode = (Node*)malloc(sizeof(Node));
    newnode->data = x;
    newnode->next = NULL;
    return newnode;
}

void SLinkedListhead(Node ** prist,LinkedList x){
    Node * mid = *prist;
    Node * newnode = CreatNode(x);
    *prist = newnode;
    newnode->next = mid;

}

void SLinkedListRemoveEnd(Node**prist){
    Node* priv  = *prist;
    Node * cur = *prist;
    
    while(cur->next != NULL){
        priv = cur;
        cur = cur ->next;
    }
    if(priv == *prist){
        *prist =NULL;
    }
    priv->next = NULL;
    free(cur);
}

void SLinkedListRemoveHead(Node**prist){
    Node * cur = (*prist)->next;
    free((*prist));
    *prist = cur;
}

void slinked_list_remove(Node ** prist,LinkedList flag){
    assert(*prist);
    
    while(((*prist)->data) == flag){
        (*prist) = (*prist) ->next; 
    }
    Node*mid = *prist;
    Node*cur = *prist;
    while(cur != NULL){
        
        while((cur)->data == flag){
            mid->next = (cur)->next;
            free(cur);
            cur = mid->next;
        }
        mid = cur;
        cur = cur->next;
    }
}

void sliked_list_insert(Node ** prist,LinkedList x,LinkedList flag){
    asser(*prist);//断言*prist不为空指针;否则插入后面不可能有x

   
   Node *cur = (*prist);
   while(cur !=NULL){
       if(cur->data == x){    //注意因为每次插入都只需要插入一次就不用while了(防止flag==x)
            Node*newnode2 = (Node*)malloc(sizeof(Node));
            newnode2->data = flag;
            newnode2 ->next = cur->next;
            cur->next = newnode2;
            cur = cur->next;
            
       }
       cur  = cur->next;
   }
}

void test1(){
    Node * plist = NULL;
    SLinkedlistPushEnd(&plist,1);
    SLinkedlistPushEnd(&plist,2);
    SLinkedlistPushEnd(&plist,3);
    SLinkedlistPushEnd(&plist,4);
    SLinkedlistPushEnd(&plist,5);
    SLinkedlistPushEnd(&plist,6);
    SLinkedListhead(&plist,4);
    SLinkedListhead(&plist,3);
    SLinkedListhead(&plist,2);
    SLinkedListhead(&plist,1);


    SLinkedListPrint(plist);
    
    slinked_list_remove(&plist,2);
    SLinkedListPrint(plist);
}

void test2(){
    Node * phead = NULL;
    slinked_list_remove(&phead,1);
    

    SLinkedlistPushEnd(&phead,1);
    SLinkedlistPushEnd(&phead,2);
    SLinkedlistPushEnd(&phead,3);
    SLinkedlistPushEnd(&phead,4);
    SLinkedlistPushEnd(&phead,5);
    SLinkedlistPushEnd(&phead,6);
    SLinkedlistPushEnd(&phead,7);
    SLinkedlistPushEnd(&phead,1);
    SLinkedlistPushEnd(&phead,8);
    SLinkedListPrint(phead);
    
    slinked_list_remove(&phead,1);
    SLinkedListPrint(phead);



}


void test3(){
    Node * phead = NULL;
    SLinkedlistPushEnd(&phead,1);
    SLinkedlistPushEnd(&phead,2);
    SLinkedlistPushEnd(&phead,3);
    SLinkedlistPushEnd(&phead,4);
    SLinkedlistPushEnd(&phead,5);
    SLinkedlistPushEnd(&phead,6);
    SLinkedlistPushEnd(&phead,7);
    SLinkedlistPushEnd(&phead,1);
    SLinkedlistPushEnd(&phead,8);
    SLinkedListPrint(phead);
    
    sliked_list_insert(&phead,1,1);
    SLinkedListPrint(phead);
    printf("输入成功");


}
int main(){
        test2();



    return 0;
}