在函数中删除第一个元素后,如何更新链接列表的phead

how to update pHead for linked list after the first element is removed in the function?

本文关键字:更新 链接 phead 列表 何更新 删除 函数 第一个 元素      更新时间:2023-10-16

链接列表为0 1 2 3 4 5,searchRemove函数中唯一的问题是参数键是phead 0,我必须返回main((更新phead:phead = searchRemove(phead,0(。

如果我只想在main((中写下searchRemove(phead,0(,我该如何更改main((之外的搜索功能以使其自行更新?

我认为我可能需要作为searchRemove写(node ** phead,int键(。但是我不知道如何更改其余代码

#include<stdio.h>
#include<stdlib.h>
struct node{
    int data;
    node *next;
};
node *newNode(int data=0, node *next=NULL){
    node x = {data, next};
    node *p = (node*)malloc(sizeof(node));
    *p = x;
    return p;
}
void showNode(const node *p){
    while(p != NULL){
        printf("%d",p->data);
        p= p->next;       
    }
    printf("n");
}
node *Delete(node *p){
    while(p != NULL){
        node *pTemp = p;
        p = p->next;
        free(pTemp);
    }
    return NULL;   
}
node *searchRemove(node *pHead, int key){
    node *p = pHead, *pA = NULL;
    while(p != NULL){
        if(p->data == key){
            node *pTemp = p->next;
            if(pA) pA->next = pTemp;
            free (p);
            return pTemp;
        }
        pA = p;
        p = p->next;
    }
    return NULL;
}
int main(){
    node *pHead = NULL;
    for(int i=5; i>=0; i--)
        pHead = newNode(i,pHead);
    //Output   
    showNode(pHead);
    searchRemove(pHead, 2);
    showNode(pHead);
    //Delete all
    pHead = Delete(pHead);   
}

将指针指向指针指向头,以便如果要删除头部,则可以在功能中更改它。当key等于第一个节点时,即pANULL

时,您需要更换头
 node *searchRemove(node **pHead, int key){
 node *p = *pHead, *pA = NULL;
 while(p != NULL)
 {
    if(p->data == key){
        node *pTemp = p->next;
        if(pA) 
           pA->next = pTemp;
        else
           *pHead=pTemp;  //make head point to new head
         free (p);
        return pTemp;
    }
    pA = p;
    p = p->next;
 }
 return NULL;
 }