在函数中删除第一个元素后,如何更新链接列表的phead
how to update pHead for linked list after the first element is removed in the function?
链接列表为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
等于第一个节点时,即pA
是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;
else
*pHead=pTemp; //make head point to new head
free (p);
return pTemp;
}
pA = p;
p = p->next;
}
return NULL;
}
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用gcc从静态链接的文件中查找可选符号
- 在线C++标准草案的更新是否会使指向它的链接无效?
- 在动态链接中,.exe如何知道在更新库时在哪里搜索库?
- 在函数中删除第一个元素后,如何更新链接列表的phead
- 优先级队列实现为单一链接,无法更新插入的指针转换
- 如何使用通过引用传递的值进行更新以删除双链接列表中的出现次数
- 如何将此旧的C 双重链接列表代码更新为C 11
- 更新依赖于 Boost 库的库的 Boost 版本,而无需重新链接
- 更新后库的 OpenCV 链接器错误