单链表的头文件如下:
#include "Slist.h"
void SlistPrint(SlistNode* plist){
SlistNode* cur = plist;
while (cur != NULL){
printf("%d->", cur->data);
cur = cur->next;
}
printf("NULL\n");
}
SlistNode* BuySlistNode(SLTDataType x){
SlistNode* NewNode = (SlistNode*)malloc(sizeof(SlistNode));
NewNode->data = x;
NewNode->next = NULL;
return NewNode;
}
void SlistPushBack(SlistNode** pplist, SLTDataType x){
SlistNode* NewNode = BuySlistNode(x);
if (*pplist == NULL){
*pplist = NewNode;
}
else{
SlistNode* tail = *pplist;
while (tail->next != NULL){
tail = tail->next;
}
tail->next = NewNode;
}
}
void SlistPushFront(SlistNode** pplist, SLTDataType x){
SlistNode* NewNode = BuySlistNode(x);
NewNode->next = *pplist;
*pplist = NewNode;
}
void SlistPopBack(SlistNode** pplist){
if (*pplist == NULL){
return;
}
else if((*pplist)->next==NULL){
free(*pplist);
*pplist = NULL;
}
else{
SlistNode* prev = NULL;
SlistNode* tail = *pplist;
while (tail->next != NULL){
prev = tail;
tail = tail->next;
}
free(tail);
if (prev->next != NULL){
prev->next = NULL;
}
}
}
void SlistPopFront(SlistNode** pplist){
if (*pplist){
SlistNode* next = (*pplist)->next;
free(*pplist);
*pplist = next;
}
}
SlistNode* SlistFind(SlistNode* pList, SLTDataType x){
SlistNode* cur = pList;
while (cur){
if (cur->data == x){
return cur;
}
else{
cur = cur->next;
}
}
return NULL;
}
void SlistInsertAfter(SlistNode* pos, SLTDataType x){
SlistNode* newnode = BuySlistNode(x);
pos->next = newnode;
newnode->next = pos->next;
}
void SlistEraseAfter(SlistNode* pos){
SlistNode* next = pos->next;
if (next != NULL)
{
pos->next = next->next;
free(next);
}
}
void SlistDestory(SlistNode** pplist)
{
SlistNode* cur = *pplist;
while (cur)
{
SlistNode* next = cur->next;
free(cur);
cur = next;
}
*pplist = NULL;
}
头文件是:
#pragma once
#include <stdio.h>
#include <malloc.h>
typedef int SLTDataType;
typedef struct SlistNode
{
SLTDataType data;
struct SlistNode* next;
}SlistNode;
void SlistPrint(SlistNode* plist);//显示链表
void SlistPushBack(SlistNode** pplist, SLTDataType x);//尾插
void SlistPushFront(SlistNode** pplist, SLTDataType x);//头插
void SlistPopBack(SlistNode** pplist);//尾删
void SlistPopFront(SlistNode** pplist);//头删
SlistNode* SlistFind(SlistNode* pList, SLTDataType x);//查找数据返回位置
void SlistInsertAfter(SlistNode* pos, SLTDataType x);//pos后插入数据
void SlistEraseAfter(SlistNode* pos);//pos后删掉数据
void SlistDestory(SlistNode** pplist);//清空链表