用vs2022编译直接报错,出错的原因是读取访问权限冲突,但是删除那加上break后只删除一个目标就不会报错,删掉break就不能运行,求帮助
代码是这样的#include <stdio.h>
#include <stdlib.h> //带头结点单链表
typedef struct Node { //定义链表数据结构
int data;
struct Node* next;
}Node;
Node* initList(){ //初始化 头结点
Node* List = (Node*)malloc(sizeof(Node));//开辟空间后List变成结构体变量
List->data = 0;//头结点不存储数据但可以计数,保存链表元素个数
List->next = NULL;
return List;
}
void headInsert(NodeList,int data) {//头插法
Node node = (Node*)malloc(sizeof(Node));//新建的一个结点;
node->data = data;
node->next = List->next;
List->next = node;
List->data++;//头结点开始计数
}
void tailInsert(NodeList,int data) {//尾插法
Node head = List;//后面头结点会改变,先保存下来
Node* node = (Node*)malloc(sizeof(Node));//新建的一个结点;
node->data = data;
node->next = NULL;
List = List->next;//指向第一个保存数据的结点,开始遍历找最后一个结点
while (List->next != NULL) {
List = List->next;
}//遍历结束找到头结点
List->next = node;//让最后一个结点指向新结点
head->data++;//头结点计数
}
void deleteNode(NodeList,int data){//删除结点,输入想删除的数data
Node pre = List;//后面会改变头结点先找个替身pre
Node* current = List->next;//设第一个保存数据的结点为当前结点current
while (current != NULL) {//遍历查找想要删除的数据data所在的结点
if (current->data == data) {
pre->next = current->next;
free(current);
//break;
}
pre = current;
current = current->next;
}
List->data--;
}
void printList(Node* List) {//遍历带头结点的单链表
List = List->next;//指向第一个保存数据的结点,开始遍历
while (List != NULL) {
printf("%d ", List->data);
List = List->next;
}
printf("\n");
}
int main() {
Node* List = initList();//创建头结点
headInsert(List, 1);
headInsert(List, 2);
headInsert(List, 3);
headInsert(List, 3);
headInsert(List, 3);
tailInsert(List, 4);
tailInsert(List, 5);
tailInsert(List, 6);
printList(List);
deleteNode(List, 3);
printList(List);
return 0;
}