#include <stdio.h>
#include <stdlib.h>
#define IS_FULL(ptr) (!(ptr))
// 建立一个整数的链表
typedef struct list_node *list_pointer;
typedef struct list_node {
int
data;
list_pointer
link;
};
list_pointer ptr = NULL;
//建立二结点的表
list_pointer create()
{
list_pointer first, second;
first = (list_pointer) malloc(sizeof(list_node));
second = (list_pointer) malloc(sizeof(list_node));
second->link = NULL;
second->data = 20;
first->data = 10;
first->link = second;
return first;
}
//在某个结点后插入操作
void insert(list_pointer *ptr, list_pointer node)
{
list_pointer temp;
temp = (list_pointer) malloc(sizeof(list_node));
if (IS_FULL(temp))
{
fprintf(stderr, "The memory is full\n");
exit(1);
}
temp->data = 50;
if (*ptr)
{
temp->link = node->link;
node->link = temp;
}
else
{
temp->link = NULL;
*ptr = temp;
}
}
//删除操作
void deleteitem(list_pointer *ptr, list_pointer trail, list_pointer node)
{
if (trail)
{
trail->link = node->link;
}
else
{
*ptr = (*ptr)->link;
}
free(node);
}
// 表的输出
void print_list(list_pointer ptr)
{
printf("The list contains: ");
for(; ptr; ptr = ptr->link)
printf("%4d", ptr->data);
printf("\n");
}
void main()
{
//获得二结点链表指针
ptr = create();
print_list(ptr);
//在第一个结点后插入
list_pointer first = ptr;
insert(&ptr, first);
print_list(ptr);
//删除第二个结点
list_pointer second = ptr->link;
deleteitem(&ptr, first, second);
print_list(ptr);
}