问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
#include<stdio.h>
int main() {
MyLinkedList* linkedList = NULL;
myLinkedListAddAtHead(linkedList, 1);
myLinkedListAddAtTail(linkedList, 3);
myLinkedListAddAtIndex(linkedList, 1, 2); //链表变为1-> 2-> 3
myLinkedListGet(linkedList, 1); //返回2
myLinkedListDeleteAtIndex(linkedList, 1); //现在链表是1-> 3
myLinkedListGet(linkedList, 1);
}
typedef struct MyLinkedList_t {
int val;
struct MyLinkedList_t* next;
} MyLinkedList;
void myLinkedListAddAtHead(MyLinkedList* obj, int val) {
MyLinkedList* newnode =(MyLinkedList*)malloc(sizeof(MyLinkedList));
newnode->val = val;//此处发生写入权限冲突
newnode->next = NULL;
if (obj->next == NULL) {
obj->next = newnode;
return;
}
else {
newnode->next = obj->next;
obj->next = newnode;
}
}
MyLinkedList* myLinkedListCreate() {
MyLinkedList* obj = (MyLinkedList*)malloc(sizeof(MyLinkedList));
obj->val = 0;
obj->next = NULL;
return obj;
}
int myLinkedListGet(MyLinkedList* obj, int index) {
if (index < 0 || obj->next == NULL) {
return -1;
}
int curr = 0;
MyLinkedList* listcurr = obj->next;
while (curr < index)
{
if (listcurr = 0) {
return -1;
}
listcurr = listcurr->next;
curr++;
}
if (listcurr != NULL) {
return listcurr->val;
}
return -1;
}
void myLinkedListAddAtTail(MyLinkedList* obj, int val) {
MyLinkedList* newnode = (MyLinkedList*)malloc(sizeof(MyLinkedList));
newnode->val = val;
newnode->next = NULL;
MyLinkedList* curr = obj;
while (curr->next != NULL) {
curr = curr->next;
}
curr->next = newnode;
}
void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) {
if (index < 0) {
myLinkedListAddAtHead(obj, val);
}
int curr = 0;
MyLinkedList* currnode = obj->next;
while (currnode->next != NULL) {
if (curr = index - 1) {
break;
}
currnode = currnode->next;
curr++;
if (index - 1 != curr) {
return;
}
}
if (curr == index)
{
myLinkedListAddAtTail(obj, val);
}
else if (index > curr) {
return;
}
else {
MyLinkedList* newnode = (MyLinkedList*)malloc(sizeof(MyLinkedList));
newnode->val = val;
newnode->next = currnode->next;
currnode->next = newnode;
}
}
void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) {
if (index < 0 || obj->next == NULL) {
return;
}
if (index == 0) {
obj->next = obj->next->next;
return;
}
MyLinkedList* currlist = obj->next;
int curr = 0;
while (currlist->next != NULL) {
if (curr == index - 1) {
break;
}
currlist = currlist->next;
curr++;
}
if (curr = index - 1 && currlist->next != NULL) {
currlist->next = currlist->next->next;
}
}
void myNodeFree(MyLinkedList* node) {
if (node->next != NULL) {
myNodeFree(node->next);
node->next = NULL;
}
free(node);
}
void myLinkedListFree(MyLinkedList* obj) {
myNodeFree(obj);
}