LinkList.h
#ifndef LINKLIST_H
#define LINKLIST_H
typedef int ElemType;
typedef struct LNode
{
ElemType *data;
struct LNode *next;
int length;
}LNode, *LinkList;
LinkList initList();
void insertList(LinkList l, ElemType *data, int sizeOfData);
int length(LinkList l);
void reverse(LinkList l);
#endif
LinkList.c
#include "LinkList.h"
#include
#include
//************************************
// Method: initList
// FullName: initList
// Access: public
// Returns: LinkList
// Qualifier:
//************************************
LinkList initList()
{
LinkList l = 0;
l = (LinkList)malloc(sizeof(LNode));
if(l == NULL)
return NULL;
l->data = 0;
l->next = NULL;
l->length = 0;
return l;
}
//************************************
// Method: insertList
// FullName: insertList
// Access: public
// Returns: void
// Qualifier:
// Parameter: LinkList l
// Parameter: ElemType * data
// Parameter: int sizeOfData
//************************************
void insertList(LinkList l, ElemType *data, int sizeOfData)
{
LNode *n = 0;
if(l == NULL || data == NULL)
return;
n = (LNode *)malloc(sizeof(LNode));
if(n == NULL)
return;
n->data = (ElemType *)malloc(sizeof(ElemType));
if(n->data == NULL)
{
free(n->data);
free(n);
return;
}
memcpy(n->data, data, sizeOfData);
n->next = l->next;
l->next = n;
l->length++;
}
//************************************
// Method: length
// FullName: length
// Access: public
// Returns: int
// Qualifier:
// Parameter: LinkList l
//************************************
int length(LinkList l)
{
if(l == NULL)
return 0;
return l->length;
}
//************************************
// Method: reverse
// FullName: reverse
// Access: public
// Returns: void
// Qualifier:
// Parameter: LinkList l
//************************************
void reverse(LinkList l)
{
LinkList p, q, r;
if(l == NULL)
return;
p = l->next;
q = p->next;//q为p下一个节点
while(q)
{
r = q->next;//r为q下一个节点
q->next = p;//指针回指
p = q;
q = r;//p, q后移 *关键是对指针间赋值的理解*
}
l->next = p;
}
main.c
#include "LinkList.h"
#include
int main()
{
ElemType num1 = 1, num2 = 2, num3 = 3;
LinkList l = initList();
LinkList l2 = initList();
insertList(l, &num1, sizeof(ElemType));
insertList(l, &num2, sizeof(ElemType));
insertList(l, &num3, sizeof(ElemType));
reverse(l);
return 0;
}