在做有关链表的练习时,遇到了链表内存错误的问题,最后解决了,在此分享给大家,错误及不足之处,还望大牛们指正。
所作的就是很简单地创建一个链表,并输出其元素,代码如下:
头文件 _List_H.h
#include<stdio.h>
#include<malloc.h>
#ifndef _List_H
typedef int ElementType ;
struct Node;
typedef struct Node * PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
struct Node
{
ElementType Element;
Position Next;
};
List MakeEmpty ( List L);
int IsEmpty( List L);
int IsLast( Position P, List L );
Position Find( ElementType X, List L);
void Delete( ElementType X, List L );
Position FindPrevious( ElementType X, List L );
void Insert( ElementType X, List L, Position P );
void DeleteList( List L );
Position Header( List L );
Position First( List L );
Position Advance( Position P );
ElementType Retrieve( Position P );
#endif
void CreateList( int N , List *L)
{
//Create a list;
int i, Ele;
List LL_Temp, LL;
for( i = 0; i < N; i++)
{
LL = ( Node * )malloc(sizeof( Node ));
scanf("%d",&Ele);
LL -> Element = Ele;
if( i > 0 && i < N - 1)
{
LL_Temp -> Next = LL;
LL_Temp = LL;
}
else
if( i == 0 )
{
LL_Temp = LL;
*L = LL;
}
else
if( i == N-1 )
{
LL_Temp -> Next = LL;
LL -> Next = NULL;
}
}
}
void PrintList(List L)
{
printf("This is function PrintList\n");
while( L )
{
printf(" %d ", L -> Element);
L = L -> Next;
}
printf("\n");
}
源文件 List.cpp
#include "_List_H.h"
int main()
{
List L ;
int n;
printf("Please input the number of the array:");
scanf("%d",&n);
printf("Please input the elements of the array:\n");
CreateList( n, &L);
PrintList( L );
return 0;
}
在初始写的时候,红色部分分别是这样的 List L, L = LL,这样写的话其实是将一个变量赋值给另一个变量,主函数中的变量从始至终都没有变化;上面的代码,使用了两级指针,传递的是地址,将会改变主函数中的变量。