尝试使用id变量从链表中删除节点。在c中
我正在尝试从链接列表中删除节点。当程序加载时,从文件填充列表 问题是,当我运行delete函数并输入要删除的id时,程序停止并卡住。它不会崩溃,只是什么也不做 我已经对它运行了调试,它将正确的数据传递给函数。temp变量似乎有问题,只有垃圾值 最初我没有使用malloc,但即使使用malloc,它仍然不起作用尝试使用id变量从链表中删除节点。在c中,c,linked-list,nodes,C,Linked List,Nodes,我正在尝试从链接列表中删除节点。当程序加载时,从文件填充列表 问题是,当我运行delete函数并输入要删除的id时,程序停止并卡住。它不会崩溃,只是什么也不做 我已经对它运行了调试,它将正确的数据传递给函数。temp变量似乎有问题,只有垃圾值 最初我没有使用malloc,但即使使用malloc,它仍然不起作用 void main() { initLinkList(); loadFile(); do{ menu(); switch (use
void main() {
initLinkList();
loadFile();
do{
menu();
switch (userChoice){
case 1:
add();
userChoice = NULL;
break;
case 2:
printNodes();
userChoice = NULL;
break;
case 3:
deleteNode();
userChoice = NULL;
break;
case 4:
deleteNode();
userChoice = NULL;
break;
}
} while (userChoice != -1);
printf("\n\n\n");
system("pause");
}
void deleteNode() {
int empId = 0;
char empFirstName[15];
do {
deleteMenu();
switch (userChoice) {
case 1:
printf("Enter The ID of the person you want to delete\n");
scanf("%d", &empId);
listHead = deleteByID(listHead, empId);
userChoice = NULL;
break;
case 2:
printf("Enter The First Name of the person you want to delete\n");
scanf("%s", empFirstName);
listHead = deleteByName(listHead, empFirstName);
userChoice = NULL;
break;
}
} while (userChoice != -1);
}
CONT *deleteByID(CONT *head, int num) {
CONT *temp1, *ptr;
//temp1 = (struct contact*)malloc(sizeof(struct contact));
//ptr = (struct contact*)malloc(sizeof(struct contact));
if (head->employeeId == num) {
temp1 = head;
head = head->next;
free(temp1);
return head;
}
ptr = head;
while (ptr->next != NULL) {
if (ptr->next->employeeId == num) {
temp1 = ptr->next;
temp1->next = ptr->next;
free(temp1);
return head;
} //end if
} //end while
printf("%d not present in the list\n", num);
return head;
}
您不需要在循环中推进ptr来搜索id为的节点。while循环主体中的最后一条语句应该是ptr=ptr->next。通过ptr->next访问所有内容也很笨拙。为什么不直接使用ptr并用“head->next”对其进行初始化呢?哦,对于指向现有内存的指针,不需要malloc资源,比如遍历列表的临时指针。当您需要为新对象或动态大小的数组创建句柄时,malloc非常有用。关于如何从链接列表中删除节点的stackoverflow,有很多示例,建议您进行一些搜索/谷歌搜索,以找到大量examples@user3629249如果我不去其他地方看看,研究一下,我就不会问了。如果这就是你所拥有的,为什么还要费心回答呢?有很多人很乐意帮助你,但除非你给出一个可验证的例子,否则没有人能帮助你。请参阅:。例如,listHead是如何声明、初始化和填充的?这只是一个例子。这就是为什么我们需要一个完整的可验证的例子。