版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013139008/article/details/83242631
/*
* 带头结点的单链表相关操作
* */
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int iData;
struct node *pNext;
}NODE_t;
NODE_t * CreateEmptySList() {
NODE_t *pHead = (NODE_t *)malloc(sizeof(NODE_t));
if (pHead == NULL) {
printf("malloc head node error\n");
return NULL;
}
return pHead;
}
NODE_t * CreateArraySList(int aArray[], int iCnt) {
NODE_t *pHead = CreateEmptySList();
if (pHead == NULL) {
printf("CreateEmptySList error\n");
return NULL;
}
int iIdx = 0;
NODE_t *pNode = NULL;
NODE_t *pCur = pHead;
for (iIdx = 0; iIdx < iCnt; iIdx++) {
pNode = (NODE_t *)malloc(sizeof(NODE_t));
if (pNode == NULL) {
printf("malloc node error\n");
/* 此处应该释放所有申请成功的结点,包括头结点 */
return NULL;
}
pNode->iData = aArray[iIdx];
pCur->pNext = pNode;
pCur = pNode;
}
pCur->pNext = NULL;
return pHead;
}
void FreeSList(NODE_t *pList) {
NODE_t *pNode = NULL;
while (pList != NULL) {
pNode = pList;
pList = pList->pNext;
free(pNode);
}
}
void ShowSList(NODE_t *pList) {
if (pList == NULL || pList->pNext == NULL) {
printf("single list is empty\n");
return;
}
NODE_t *pNode = pList->pNext;
while (pNode != NULL) {
printf("%d ", pNode->iData);
pNode = pNode->pNext;
}
printf("\n");
return;
}
int main() {
/* 创建单链表 */
int aArray[6] = { 1, 4, 5, 2, 1, 6 };
NODE_t *pList1 = CreateArraySList(aArray, 6);
/* 打印单链表 */
ShowSList(pList1);
/* 释放单链表 */
FreeSList(pList1);
return 0;
}