1)初始化链表
2)增加节点的功能(头插法、尾插法)
3)删除节点
4)遍历节点的功能
代码:
#include<stdio.h>
#include<stdlib.h>//生成函数的头文件
#define TRUE 1
#define FALSE 0
typedef struct Node{
int data;
struct Node* next;
}Node;
Node* initList(){
Node* L=(Node*)malloc(sizeof(Node));
L->data=0;
L->next=L;
return L;
}
void headInsert(Node* L,int data){
Node* node=(Node*)malloc(sizeof(Node));
node->data=data;
node->next=L->next;
L->next=node;
}
void tailInsert(Node* L,int data){
Node* n=L;
Node* node=(Node*)malloc(sizeof(Node));
node->data=data;
while(n->next!=L){
n=n->next;
}
node->next=L;
n->next=node;
}
int deleteNode(Node* L,int data){
Node* pre=L;
Node* node=L->next;
while(node!=L){
if(node->data==data){
//delete
pre->next=node->next;
free(node);
return TRUE;
}
pre=node;
node=node->next;
L->data--;
}
return FALSE;
}
void printList(Node* L){
Node* node=L->next;
while(node!=L){//循环链表判断结束的条件应该是达到头节点
printf("%d->",node->data);
node=node->next;
}
printf("NULL\n");
}
int main()
{
Node* L=initList();
headInsert(L,1);
headInsert(L,2);
headInsert(L,3);
headInsert(L,4);
headInsert(L,5);
tailInsert(L,6);
tailInsert(L,7);
printList(L);
deleteNode(L,4);
printList(L);
return 0;
}