#ifndef __LINKLIST_H__
#define __LINKLIST_H__
#include <stdio.h>
#include <stdlib.h>
typedef struct linklist {
int data;
struct linklist *next;
}linklist_t;
linklist_t *create_linklist(void);
int is_empty_linklist(linklist_t *l);
int insert_linklist(linklist_t *l, int x, int pos);
int del_linklist(linklist_t *l, int pos);
void show_linklist(linklist_t *l);
void reverse_linklist(linklist_t *l);
#endif
#include "linklist.h"
linklist_t *create_linklist(void)
{
linklist_t *l = (linklist_t *)malloc(sizeof(linklist_t));
l->data = 0;
l->next = NULL;
return l;
}
int is_empty_linklist(linklist_t *l)
{
return l->next == NULL;
}
int insert_linklist(linklist_t *l, int x, int pos)
{
int ret = (l != NULL) && (pos >= 0);
if (ret)
{
int i = 0;
linklist_t *currentp = l;
linklist_t *node = (linklist_t *)malloc(sizeof(linklist_t));
node->data = x;
node->next = NULL;
for (i = 0; i < pos ; i++)
currentp = currentp->next;
node->next = currentp->next;
currentp->next = node;
}
return ret;
}
int del_linklist(linklist_t *l, int pos)
{
int ret = (l != NULL) && (pos > 0);
int tmp_data;
if (is_empty_linklist(l))
{
puts(" l is empty \n");
return -1;
}
if (ret)
{
int i = 0;
linklist_t *currentp = l;
linklist_t *tmp_datap = NULL;
for (i = 0; i < (pos - 1); i++)
currentp = currentp->next;
tmp_datap = currentp->next;
tmp_data = tmp_datap->data;
currentp->next = tmp_datap->next;
free(tmp_datap);
}
return tmp_data;
}
void show_linklist(linklist_t *l)
{
if (is_empty_linklist(l))
{
puts("l is empty \n");
return;
}
linklist_t *p =l->next;
while(p)
{
printf("%d \n", p->data);
p = p->next;
}
printf("show list over \n");
putchar(10);
}
void reverse_linklist(linklist_t *l)
{
linklist_t *p = l->next;
linklist_t *q;
l->next = NULL;
while(p)
{
q = p->next;
p->next = l->next;
l->next = p;
p = q; //等号右边是实体,左边是指针
}
}
int main(int argc, const char *argv[])
{
int i = 0;
linklist_t *l = create_linklist();
for (i = 1; i < 10; i++)
insert_linklist(l, i, i-1);
show_linklist(l);
del_linklist(l, 2);
show_linklist(l);
insert_linklist(l,2,2);
show_linklist(l);
reverse_linklist(l);
show_linklist(l);
return 0;
}