c - 删除链表上的头部
问题描述
我是 c 新手,正在尝试做作业。我需要创建数据并将其插入到链表中,然后打印它并删除列表中的一个节点。
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node * next;
}node;
void printlist(node *head);
void dele(int del,node * head);
node * create(int n);
int main(){
int n=0,del;
node * head=NULL;
printf("Enter Number of Data: ");
scanf("%d",&n);
head=create(n);
printf("Data in linked list are : ");
printlist(head);
printf("\nEnter Data yout want to delete : ");
scanf("%d",&del);
dele(del,head);
printf("Data remained in linked list are : ");
printlist(head);
return 0;
}
node * create (int n){
int i=0;
node * head = NULL;
node * temp = NULL;
node * p = NULL;
for(i=0;i<n;i++){
temp = (node*)malloc(sizeof(node));
printf("Enter Data%d : ",i+1);
scanf("%d",&(temp->data));
temp->next=NULL;
if(head==NULL){
head= temp;
}
else{
p = head;
while(p->next != NULL){
p=p->next;
}
p->next=temp;
}
}
return head;
}
void printlist(node * head){
node *n=head;
while(n!=NULL){
printf("%d ",n-> data);
n=n->next;
}
}
void dele(int del,node * head){
int found = 0, position = 0, i;
struct node *temp = head;
struct node *prev = NULL;
while(temp != NULL)
{
if(temp->data == del )
{
if(prev == NULL){ /*If the node is the head*/
head = head->next;
delete temp;
return ;
}else{
prev->next = temp->next;
delete temp;
return ;
}
}
prev = temp;
temp = temp->next;
}
}
一切正常,但是当我尝试删除第一个节点时出现问题,随机数开始出现。
但是当我尝试删除其他节点时,它会完美地显示结果。有什么解决办法吗?
解决方案
您必须更改dele
这种方式的签名:
void dele(int del, node ** head)
然后你必须相应地调整内容,这行对你的问题特别重要:
if (prev == NULL){ /* If the node is the head */
if (head) *head = (*head)->next;
}
最后你dele
通过传递一个指针来调用head
:
dele(del, &head);
这样,新的head
将在函数之外可见(它不在您当前的代码中)。
推荐阅读
- elasticsearch - 如何在elasticsearch中更新和剥离数组字段的第一个字符
- python - 使用 CSV 的 Python 散点图
- codeigniter - IIS 下的 Codeigniter - SOAP“方法不允许”
- microsoft-graph-api - 在 MS Graph API 中是否有一个 webhook 可以知道一个人在团队通话中与谁交谈?
- java - 带有 ViewPager2 的 FragmentStateAdapter 显示不正确的片段
- java - 按列查找已排序二维数组中二维数组元素的索引
- visual-studio-code - VSCode 不会安装扩展 - 权限被拒绝
- c++ - 命名空间错误
- python - 在Python中读取按行拆分的字符串项目作为列表
- interpreter - 为什么我会收到这些错误,我该如何解决?