我试图建立一个通常的链表,我需要实现 3 个函数,新建、列出和删除。new 添加新节点;list 按优先级和创建日期顺序列出所有节点;remove 删除一个节点。我认为我的问题是删除列表的第一个节点..请帮帮我:)
代码:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "SO01.h"
#define SIZE 5
void main(void){
int i;
list_t* array;
array=(list_t*) malloc(sizeof(list_t)*(SIZE+1));
for(i=0; i<=SIZE; i++)
array[i].first=NULL;
addNewTask(array, 3, 32);
addNewTask(array, 4, 33);
addNewTask(array, 4, 34);
addNewTask(array, 5, 35);
addNewTask(array, 5, 36);
addNewTask(array, 5, 37);
listTasks(array, 4);
removeTask(array, 35);
listTasks(array, 4);
}
void addNewTask(list_t* array1, int prioridade, int id){
lst_iitem_t* task;
task=(lst_iitem_t*) malloc(sizeof(lst_iitem_t));
task->next=NULL;
task->value=id;
if(array1[prioridade].first==NULL)
array1[prioridade].first=task;
else{
lst_iitem_t* aux;
aux=array1[prioridade].first;
while(aux->next != NULL)
aux = aux->next;
aux->next=task;
}
}
void listTasks(list_t* array1, int prioridade){
int i;
for(i=5; i>=prioridade; i--)
printListFromBack(array1[i].first, i);
}
void printListFromBack(lst_iitem_t * root, int prioridade)
{
if(!root)
return;
else
if(root->next)
printListFromBack(root->next, prioridade);
printf("Prioridade = %d || Id = %d\n", prioridade, root->value);
}
void removeTask(list_t* array1, int id){
int i;
lst_iitem_t* curr=NULL, *prev=NULL;
for(i=0; i<=5; i++){
curr=array1[i].first;
for(curr; curr != NULL; prev=curr, curr=curr->next){
if(curr->value == id){
if(prev==NULL){
curr=curr->next;
}else{
prev->next=curr->next;
}
free(curr);
return;
}
}
}
printf("TAREFA INEXISTENTE\n");
}
输出:
Prioridade = 5 || Id = 37
Prioridade = 5 || Id = 36
Prioridade = 5 || Id = 35
Prioridade = 4 || Id = 34
Prioridade = 4 || Id = 33
Prioridade = 5 || Id = 37
Prioridade = 5 || Id = 36
Prioridade = 5 || Id = 0 <----- why 0 appears?
Prioridade = 4 || Id = 37 <----- Repeating and wrong priority
Prioridade = 4 || Id = 36 <----- Same here
Prioridade = 4 || Id = 34
Prioridade = 4 || Id = 33
感谢帮助 ;)