1、源代码
#include "list.h"
// 1、创建头结点
Node * CreateHeadeNode(void)
{
Node *pHead = (Node *)malloc(sizeof(Node));
pHead->m_pNext = NULL;
return pHead;
}
// 2、创建新结点
Node * CreateNewNode(DATA data)
{
Node *pNew = (Node *)malloc(sizeof(Node));
pNew->m_pNext = NULL;
pNew->data = data;
return pNew;
}
// 3、头插入法插入节点
void InsertNodeByHead(Node *pHead, DATA data)
{
Node *pNew = CreateNewNode(data);
pNew->m_pNext = pHead->m_pNext;
pHead->m_pNext = pNew;
}
// 4、删除结点
void RemoveNodeByData(Node *pHead, DATA data)
{
Node *pCurNode = pHead->m_pNext;
Node *pPreNode = pHead;
while (pCurNode != NULL && pCurNode->data != data)
{
pPreNode = pCurNode;
pCurNode = pPreNode->m_pNext;
}
if (pCurNode == NULL)
return;
pPreNode->m_pNext = pCurNode->m_pNext;
free(pCurNode);
pCurNode = NULL;
}
// 5、通过数据查找结点
// 返回NULL表示没有找到
// 非NULL表示找到
Node * SearchNodeByData(Node *pHead, DATA data)
{
Node *p = pHead->m_pNext;
while (p != NULL && p->data != data)
{
p = p->m_pNext;
}
return p;
}
2、头文件
#ifndef __LIST_H__
#define __LIST_H__
#include <stdio.h>
/* 定义数据类型 */
typedef int DATA;
typedef struct _Node_
{
DATA data;
struct _Node_ *m_pNext;
}Node;
/* 函数声明区域 */
Node * CreateHeadeNode(void); // 创建头结点
Node * CreateNewNode(DATA data); // 创建新结点
void InsertNodeByHead(Node *pHead, DATA data); // 插入一个结点
void RemoveNodeByData(Node *pHead, DATA data); // 删除一个结点
Node * SearchNodeByData(Node *pHead, DATA data); // 查找一个结点
void ListAllNode(Node *pHead); // 打印链表数据
#endif /* __LIST_H__ */