C语言单链表

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__ */

相关推荐