I’m practicing the implementation of Linked list code. so I write the code:
file LinkedList.c
#include <stdio.h>
#include "function.h"
int main(void) {
//initialize
struct Node myNode = { 10,NULL };
List head = &myNode;
insert(20, head, head);
makeEmpty(head);
return 0;
}
file function.h
//this is the statement of the Linkedlist
#ifndef _FUNCTION_H
#define _FUNCTION_H
struct Node;
//pointer to the strcut Node
typedef struct Node* PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
struct Node
{
//a struct pointer that point to next struct
int element;
//body
Position Next;
/* data */
};
//清空整张链表
List makeEmpty(List L);
//判断链表是否为空
int isEmpty(List L);
int isLast(Position p, List L);
Position Find(void* x, List L);
void insert(int x, List L, Position P);
#endif /*_function_h*/
file List.c
#include "function.h"
#include <stdio.h>
#include <stdlib.h>
List makeEmpty(List L) {
Position cur = L;
Position next;
while (cur!= NULL) {
next = cur->Next;
free(cur);
cur = next;
}
cur = NULL;
next = NULL;
//这里c是copy by value 所以改变那个指针,如果不赋值的话
//就是用void的话,不会将原来的指针改变。
L = NULL;
return L;
}
//right
int isEmpty(List L) {
return L->Next == NULL;
}
int isLast(Position P, List L) {
//判断P在不在List里
List cur = L;
while (cur->Next != P) {
cur = cur->Next;
}
if (cur == NULL) {
fprintf(stderr, "there is no P in the list Ln");
return -1;
}
if (P->Next == NULL) {
return 1;
}
else {
return 0;
}
return -1;
}
void insert(int x, List L, Position P) {
Position tmpCell;
tmpCell = (Position)malloc(sizeof(struct Node));
if (tmpCell == NULL) {
fprintf(stderr,"out of the space!n");
}
tmpCell->element = x;
tmpCell->Next = P->Next;
P->Next = tmpCell;
}
but when I run the code , I get the fault that : invalid heap pointer , so why
,and when I write head->Next as the parameter in the function “makeEmpty” ,it can run ,but why, in my program , “head” point to the first struct, so head->Next should point to the second struct. I’m really puzzled.
New contributor
fuckme is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.