本文共 1840 字,大约阅读时间需要 6 分钟。
在C语言中,我们可以通过动态内存管理来操作链表。以下是实现链表操作的代码解释:
首先,我们定义了一个链表节点结构:
typedef struct LinkNode{ int num; LinkNode* next;}Lk, * lk;初始化链表时,我们创建一个头节点,并返回其指针:
lk initLinkNode(){ //创建头结点 lk headNode = (lk)malloc(sizeof(Lk)); //检验内存分配是否成功 if (headNode == NULL){ return NULL; } //初始化头结点 headNode->num = -1; headNode->next = NULL; //记录当前节点位置 lk currentNode = headNode; //用户输入数值 int val = -1; while(1){ printf("请给当前链表赋值,输入-1结束输入:\n"); scanf("%d", &val); if(val == -1){ break; } //分配新节点存储输入值 lk node = (lk)malloc(sizeof(Lk)); node->num = val; node->next = NULL; //将新节点连接到链表末尾 currentNode->next = node; //更新当前节点位置 currentNode = currentNode->next; } return headNode;}遍历链表的实现如下:
void for_each_linkList(lk headNode){ if(headNode == NULL){ return; } //从第二个节点开始遍历 lk curNode = headNode->next; while(curNode){ printf("%d\n", curNode->num); curNode = curNode->next; }}删除链表节点的实现:
void delete_LinkList(lk headNode, int val){ if(headNode == NULL){ return; } //创建辅助指针 lk prveNode = (lk)malloc(sizeof(Lk)); lk curNode = (lk)malloc(sizeof(Lk)); prveNode = headNode; curNode = headNode->next; //查找需要删除的节点 while(curNode){ if(curNode->num == val){ break; } prveNode = curNode; curNode = curNode->next; } //如果未找到节点 if(curNode == NULL){ return; } //删除节点 prveNode->next = curNode->next; free(curNode); curNode = NULL;}主函数实现链表的操作:
int main(){ lk headNode = initLinkNode(); delete_LinkList(headNode, 20); printf("链表遍历结果为:\n"); for_each_linkList(headNode); return 0;}
转载地址:http://qewc.baihongyu.com/