链表

#include <stdio.h>
#include <malloc.h>

typedef struct Node {
	int data;
	struct Node* next;
}Node, * LinkList;

//头节点创建
void CreateListHead(LinkList &L) {
	int i;
	L = (LinkList)malloc(sizeof(Node));
	L->next = NULL;
}

//节点增加
void ListAdd(LinkList L, int n) {
	int j;
	LinkList p, s;
	p = L;
	while (p->next) {
		p = p->next;
	}
	s = (LinkList)malloc(sizeof(Node));
	s->data = n;
	p->next = s;
	s->next = NULL;
}

//在第i个节点位置之前插入新的数据元素n,L的长度加1
int ListInsert(LinkList L, int i, int n) {
	int j;
	LinkList p, s;
	p = L;
	j = 1;
	while (p && j < i) {
		p = p->next;
		j++;
	}
	if (!p || j > i) {
		printf("error,the node is not exist.");
		return 0;
	}
	s = (LinkList)malloc(sizeof(Node));
	s->data = n;
	s->next = p->next;
	p->next = s;
	return 1;
}


//删除第i个节点
int ListDelete(LinkList L, int i) {
	int j;
	LinkList p, q;
	p = L;
	j = 1;
	while (p->next && j < i) {
		p = p->next;
		j++;
	}
	if (!(p->next) || j > i) {
		printf("error");
		return 0;
	}
	q = p->next;
	p->next = q->next;
	free(q);//回收资源
	return 1;
}

//整表删除
int ClearList(LinkList L) {
	LinkList p, q;
	p = L->next;/*指向第一个节点*/
	while (p) {
		q = p->next;
		free(p);
		p = q;
	}
	L->next = NULL;
	return 1;
}

//遍历
void TraverseList(LinkList L) {
	LinkList p, q;
	p = L->next;
	printf("list: ");
	while (p) {
		printf("%d ", p->data);
		p = p->next;
	}
}

int main() {
	LinkList l;
	//创建
	CreateListHead(l);
	ListAdd(l, 1);
	ListAdd(l, 2);
	ListAdd(l, 3);
	ListAdd(l, 4);
	ListAdd(l, 5);
	//遍历
	TraverseList(l);
	printf("\n");
	//插入
	ListInsert(l, 3, 8);
	TraverseList(l);
	printf("\n");
	//删除
	ListDelete(l,4);
	TraverseList(l);
	printf("\n");
	//整表删除
	ClearList(l);
	TraverseList(l);
	printf("\n");
	return 0;
}