链表(c语言实现)
节点的数据结构
struct Node
{
int value;
struct Node* next;
};
typedef struct Node Node;操作和演示
#include <stdlib.h>
#include <stdio.h>// 建立一个节点
Node *createNode(int value)
{
Node *pNode = (Node *) malloc(sizeof(Node));
pNode->value = value;
pNode->next = NULL;
return pNode;
}
// 建立一个空链表(带头节点)
Node *createList()
{
return createNode(-0x3f3f3f);
}
// 删除一个节点
void deleteNode(Node *list, int index)
{
Node *temp = list->next;
Node *node = NULL;
int count = 1;
index -= 1;
if (index == 0)
{
node = list->next;
list->next = list->next->next;
free(node);
return;
}
while (temp != NULL && count < index)
{
temp = temp->next;
count++;
}
list = temp;
node = list->next;
list->next = temp->next->next; // 从链表中摘除
free(node);
}
// 销毁链表
void destroy(Node *list)
{
Node *temp = list->next;
Node *node = NULL;
int count = 1;
while (temp != NULL)
{
node = temp;
temp = temp->next;
free(node);
}
free(list);
}
// 在指定的位置插入一个节点
void insert(Node *list, Node *node, int index)
{
Node *temp = list->next;
int count = 1;
index -= 1;
if (index == 0)
{
list->next = node;
node->next = temp;
return;
}
while (temp != NULL && count < index)
{
temp = temp->next;
count++;
}
list = temp;
temp = temp->next;
list->next = node;
node->next = temp;
}
// 在末尾追加一个节点
void append(Node *list, Node *node)
{
Node *temp = list->next;
if (temp == NULL)
{
list->next = node;
return;
}
while (temp->next != NULL)
temp = temp->next;
temp->next = node;
}
// 显示链表
void showList(Node *list)
{
Node *temp = list->next;
if (list == NULL || temp == NULL)
{
printf("null\n");
return;
}
printf("%d", temp->value);
temp = temp->next;
while (temp != NULL)
{
printf("->%d", temp->value);
temp = temp->next;
}
printf("\n");
}
// 得到一个节点
Node *getNode(Node *list, int index)
{
Node *temp = list->next;
int count = 1;
while (temp != NULL && count < index)
{
temp = temp->next;
count++;
}
return count == index ? temp : NULL;
}
int main()
{
Node *list = createList();
Node *pNode = NULL;
int i;
for (i = 1; i <= 3; i++)
{
pNode = createNode(i * 10);
append(list, pNode);
}
showList(list);
deleteNode(list, 1);
showList(list);
pNode = createNode(40);
insert(list, pNode, 1);
showList(list);
pNode = getNode(list, 1);
printf("%d\n", pNode->value);
destroy(list);
return 0;
}