头插法
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
}Node, *LinkList;
LinkList CreateFromHead()
{
LinkList L;
Node *s;
char c;
int flag = 1;
L = (LinkList)malloc(sizeof(Node));
L->next = NULL;
while(flag)
{
c = getchar();
if(c != '#')
{
s = (Node*)malloc(sizeof(Node));
s->data = c;
s->next = L->next;
L->next = s;
}
else
{
flag = 0;
}
}
return L;
}
int main()
{
LinkList L;
Node *p;
L = CreateFromHead();
p = L->next;
while(p != NULL)
{
printf("%c\n",p->data);
p = p->next;
}
return 0;
}
尾插法
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
}Node, *LinkList;
LinkList CreateFromTail()
{
LinkList L;
char c;
Node *r, *s;
int flag = 1;
L = (Node*)malloc(sizeof(Node));
L->next = NULL;
r = L;
while(flag)
{
c = getchar();
if(c != '#')
{
s = (Node *)malloc(sizeof(Node));
s->data = c;
r->next = s;
r = s;
}
else
{
flag = 0;
r->next = NULL;
}
}
return L;
}
int main()
{
LinkList L;
Node *p;
L = CreateFromTail();
p = L->next;
while(p != NULL)
{
printf("%c\n",p->data);
p = p->next;
}
return 0;
}
可以使用VLD检测内存泄漏问题:
#include <iostream>
#include <vld.h>
using namespace std;
#define MAX_LEN 100
typedef struct Node
{
int data;
Node *next;
}Node, *PNode;
//头插法
void create1(PNode &l)
{
Node *s = NULL;
for (int i = 1; i <= 5; i++)
{
s = new Node;
s->data = i;
s->next = l->next;
l->next = s;
}
}
//尾插法
void create2(PNode &l)
{
PNode tail = l;
Node *s = NULL;
for (int i = 1; i <= MAX_LEN; i++)
{
s = new Node;
s->data = i;
s->next = NULL;
tail->next = s;
tail = s;
}
}
void show(PNode &l)
{
Node *p = l->next;
while (p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void del1(PNode &l)
{
while (l)
{
Node *p = l->next;
delete l;
l = NULL;
l = p;
}
}
//递归
void del2(PNode &l)
{
if (l == NULL)
{
return;
}
del2(l->next);
delete(l);
l = NULL;
}
int main()
{
PNode l = new Node;
l->next = NULL;
create2(l);
show(l);
del1(l);
return 0;
}