1.创建结点
2.在链表末尾插入结点
3.删除接点
4.查找某个结点
5.头插法
6.尾插法
7.链表的长度
8.遍历结点
#include <stdlib.h>
#include <stdio.h>
typedef struct _Node
{
char value;
struct _Node * next;
} Node, *PNode;
PNode header = NULL;
PNode create_node(char value)
{
PNode node = (PNode)(malloc(sizeof(Node)));
node->value = value;
node->next = NULL;
return node;
}
void push(PNode node)//在链表最后插入节点(投放结点)
{
PNode cur_node = header;
if (!header)//当header为空
{
header = node;
return;
}
while (cur_node->next)//当header不为空,找到最后一个
{
cur_node = cur_node->next;
}
cur_node->next = node; //找到and 插入
}
void remove(char value)//删除结点
{
PNode pre_node = NULL;
PNode cur_node = header;
while (cur_node)//循环找到要删除的元素
{
if (cur_node->value == value)//找到
{
break;
}
pre_node = cur_node;
cur_node = cur_node->next;
}
if (!cur_node)//排除找不到的情况
{
return;
}
if (!pre_node)//要删除的结点在第一个元素
{
header = cur_node->next;
free(cur_node);
}
else//要删除的结点在中间或者后面
{
pre_node->next = cur_node->next;
free(cur_node);
}
}
PNode find(char value)//找到某个结点
{
PNode cur_node = header;
while (cur_node)//逐个向后查找
{
if (cur_node->value == value)//找到
{
return cur_node;
}
cur_node = cur_node->next;
}
return NULL;
}
void insert(char value, PNode node)//将结点插入到找到的结点前面
{
PNode cur_node = header;
PNode pre_node = NULL;
while (cur_node)//向后查找要插入的结点
{
if (cur_node->value == value)//找到
{
break;
}
pre_node = cur_node;
cur_node = cur_node->next;
}
if (!cur_node)//没找到 返回
{
return;
}
if (!pre_node)//@1 第一个节点
{
header = node;
node->next = cur_node;
}
else//@2 中间结点
{
pre_node->next = node;
node->next = cur_node;
}
}
void insert_head(char value, PNode node)//将结点插入到找到的结点后面
{
PNode cur_node = header;
PNode pre_node = NULL;
while (cur_node)//向后查找要插入的结点
{
if (cur_node->value == value)//找到
{
break;
}
pre_node = cur_node;
cur_node = cur_node->next;
}
if (!cur_node)//没找到 返回
{
return;
}
if (!pre_node)//@1 第一个节点
{
header = node;
node->next = cur_node;
}
else//@2 中间结点
{
node->next = cur_node->next;
cur_node->next = node;
}
}
//链表长度
int length(PNode node)
{
int len = 0;
PNode cur_node = header;
while (cur_node)
{
cur_node = cur_node->next;
len++;
}
return len;
}
void traversal(void)//遍历结点
{
PNode node = header;
while (node)
{
printf("Value: %c\n", node->value);
node = node->next;
}
}
int main(int ac, char * av[])
{
PNode node=create_node('a');
push(node);
node=create_node('v');
push(node);
node = create_node('f');
push(node);
node = create_node('r');
push(node);
node = create_node('t');
push(node);
traversal();
//remove('f');
node = create_node('m');
//insert('r', node);
//insert_head('r', node);
//traversal();
int len = length(node);
printf("%i\n", len);
return 0;
}