#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);
}
MyLinkedList * linkedList = (MyLinkedList * )malloc(sizeof(MyLinkedList));
linkedList->next = NULL;
main开头直接给链表创建哨兵节点
这个函数肯定要出问题,但不应该在这啊
传入的obj为NULL,那么if (obj->next == NULL) {会出错。要先判断obj是否为空
void myNodeFree(MyLinkedList* node) void myLinkedListFree(MyLinkedList* obj) 两个函数未做修改调试,其余的修改如下,供参考:
#include <stdio.h>
#include <malloc.h>
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) == NULL) { //if (obj->next == NULL)
(*obj) = newnode; //obj->next = newnode;
//return;
}
else {
newnode->next = (*obj); //修改
(*obj) = 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 == NULL) { //修改
return -1;
}
int curr = 0;
MyLinkedList* listcurr = obj; //修改
while (listcurr && curr < index) //修改
{
//if (listcurr == 0) { //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); //修改
return; //修改
}
int curr = 0;
MyLinkedList* currnode = (*obj); //修改
while (currnode && curr < index - 1) {
//if (curr == (index - 1)) { //if (curr = index - 1)
// break;
//}
currnode = currnode->next;
curr++;
//if (index - 1 != curr) {
// return;
//}
}
if (!currnode) //修改
{
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) {
MyLinkedList* p;
if (index < 0 || (*obj)->next == NULL) {
return;
}
if (index == 0) {
p = (*obj); //修改
(*obj) = (*obj)->next; //(*obj)->next = (*obj)->next->next;
free(p); //修改
return;
}
MyLinkedList* currlist = (*obj); //修改
int curr = 0;
while (currlist && curr < index - 1) { //修改
//if (curr == index - 1) {
// break;
//}
currlist = currlist->next;
curr++;
}
if (currlist->next) { //if (curr = index - 1 && currlist->next != NULL)
p = currlist->next; //修改
currlist->next = p->next;//修改
free(p); //修改
}
}
void myNodeFree(MyLinkedList* node) {
if (node->next != NULL) {
myNodeFree(node->next);
node->next = NULL;
}
free(node);
}
void myLinkedListFree(MyLinkedList* obj) {
myNodeFree(obj);
}
void displaymyLinkedList(MyLinkedList* obj)
{
MyLinkedList* p = obj;
while (p) {
printf(p == obj ? "%d" : "->%d", p->val);
p = p->next;
}
printf("\n");
}
int main()
{
MyLinkedList* linkedList = NULL;
myLinkedListAddAtHead(&linkedList, 1); //修改
myLinkedListAddAtTail(&linkedList, 3); //修改
displaymyLinkedList(linkedList);
myLinkedListAddAtIndex(&linkedList, 1, 2); //链表变为1->2->3
displaymyLinkedList(linkedList);
printf("返回:%d\n",myLinkedListGet(linkedList, 1)); //返回2
myLinkedListDeleteAtIndex(&linkedList, 1); //现在链表是1-> 3
displaymyLinkedList(linkedList);
printf("返回:%d\n",myLinkedListGet(linkedList, 1));//返回3
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!