一:单链表的创建、打印和释放

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/u013139008/article/details/83242631