我正在创建linked-list
并将数据列表显示为已排序格式。一切正常。当我不向其中插入新数据时,删除部分也可以工作。我的意思是,当我跳过insert
部分时。但是,当我还要使用insert
部分时,那就说-(data) Not Found to delete!
。我不明白为什么会这样?在哪里出问题了,有人会帮忙找出来吗?
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}node;
node *createLinkedList(int n);
void displayList(node *head);
void sortedList(node *head);
void search(node *head, int data);
void insert(node *head, int data);
void deleteNode(node *head, int data);
int main(){
int n = 0;
int sr = 0;
node *head = NULL;
printf("\nHow many nodes: ");
scanf("%d", &n);
head = createLinkedList(n);
sortedList(head);
displayList(head);
printf("\nEnter the value you want to delete: ");
scanf("%d", &n);
deleteNode(head, n);
displayList(head);
printf("\nEnter the new value to insert: ");
scanf("%d", &n);
insert(head, n);
sortedList(head);
displayList(head);
printf("\nEnter the value to search: ");
scanf("%d", &n);
search(head, n);
return 0;
}
node *createLinkedList(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("\nEnter the data for node number %d: ", i+1);
scanf("%d", &(temp->data));
//if list is currently empty
if(head == NULL){
head = temp;
}else{
p = head;
while(p->next != NULL){
p = p->next;
}
p->next = temp;
}
}
return head;
}
void displayList(node *head){
node *p = head;
while(p != NULL){
printf("\t%d", p->data);
p = p->next;
}
}
void sortedList(node *head){
int temp;
node *i, *j;
printf("\nThe sorted data list is: \n");
for(i = head; i->next != NULL; i = i->next){
for(j = i->next; j != NULL; j = j->next){
if(i->data > j->data){
temp = i->data;
i->data = j->data;
j->data = temp;
}
}
}
}
void search(node *head, int data){
int count = 0;
while(head->next != NULL){
if(head->next->data == data){
count++;
}
head = head->next;
}
printf("\nTotal %d results found for %d\n", count, data);
}
void insert(node *head, int data){
while(head->next != NULL){
head = head->next;
}
head->next = (node *)malloc(sizeof(node));
head->next->data = data;
head->next->next = NULL;
printf("\nAfter inserting %d", data);
}
void deleteNode(node *head, int data){
while(head->next != NULL){
if(head->next->data == data){
head->next = head->next->next;
return 0;
}
if(head->next->data != data){
printf("\n%d Not Found to delete! \n", data);
return 0;
}
head = head->next;
}
printf("\nAfter delete %d", data);
}
答案 0 :(得分:2)
在deleteNode函数中,您正在检查第二个元素,如果不是需要删除的数据,则打印出“找不到要删除的”并退出该函数。因此,您要删除的数据不会被删除。
答案 1 :(得分:1)
在* createLinkedList();中函数,您无需为temp的下一个指针(这是一个野生指针)分配值,而只是将数据读入temp-> data