SEexplode 2022-02-14 10:47 采纳率: 100%
浏览 45
已结题

创建链表新节点时发生,写入权限冲突

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

#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);

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

4条回答 默认 最新

  • CSDN专家-link 2022-02-14 14:29
    关注

    MyLinkedList * linkedList = (MyLinkedList * )malloc(sizeof(MyLinkedList));
    linkedList->next = NULL;
    main开头直接给链表创建哨兵节点

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月22日
  • 已采纳回答 2月14日
  • 请详细说明问题背景 2月14日
  • 创建了问题 2月14日

悬赏问题

  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法