/* 基本数据结构的定义以及函数的声明 */ typedef int ElemType; typedef struct Node { ElemType elem; struct Node* next; } Node, * NodePtr, **ForwardList; NodePtr createNode(ElemType x); void showList(ForwardList lst); void destroyList(ForwardList lst); // 创建元素为x的节点并插入到节点where后面 // 若where为NULL, 则插入到链表lst的首部作为首节点 // 返回新节点的指针 NodePtr insertAfterNode(NodePtr where, ElemType x, ForwardList lst);
/* 链表相关函数的具体实现 */ NodePtr createNode(ElemType x) { NodePtr pNode = (NodePtr) malloc(sizeof(Node)); if (pNode == NULL) { perror("malloc"); exit(1); } pNode->elem = x; pNode->next = NULL; return pNode; } NodePtr insertAfterNode(const NodePtr where, ElemType x, ForwardList lst) { NodePtr pNode = createNode(x); if (where == NULL) { *lst = pNode; } else { pNode->next = where->next; where->next = pNode; } return pNode; } void showList(ForwardList lst) { printf("显示链表: "); NodePtr curr = *lst; while (curr->next != NULL) { printf("%d->", curr->elem); curr = curr->next; } printf("%d\n", curr->elem); } void destroyList(ForwardList lst) { printf("销毁链表: "); NodePtr curr = *lst; while (curr != NULL) { NodePtr next = curr->next; printf("%d ", curr->elem); free(curr); curr = next; } printf("\n"); }