C语言链表写法,练习链表
Posted 慕書
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言链表写法,练习链表相关的知识,希望对你有一定的参考价值。
C语言链表写法,练习链表
- 建立要一个文件:LinkList.h
内容:
#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include<stdlib.h>
#include<stdbool.h>
#include<stdio.h>
#ifdef __cplusplus
extern "C"
#endif
//定义节点数据类型
struct LinkNode
int data;
struct LinkNode *next;
;
//初始化链表
struct LinkNode *Init_LinkList();
//在值为oldval的位置插入新的数据newval
void InsertByValue_LinkList(struct LinkNode *header, int oldval, int newval);
//删除值为val的结点
void RemoveByValue_LinkList(struct LinkNode *header, int delValue);
//遍历
void Foreach_LinkList(struct LinkNode *header);
//销毁
void Destroy_LinkList(struct LinkNode *header);
//清空
void Clear_LinkList(struct LinkNode *header);
#ifdef __cplusplus
#endif
2.建立一个文件:LinkList.c
#include"LinkList.h"
//初始化链表
struct LinkNode *Init_LinkList()
//创建头结点
struct LinkNode *header = malloc(sizeof(struct LinkNode));
header->data = -1;//头节点
header->next = NULL;
//尾部指针
struct LinkNode *pRear = header;
int val = -1;
while (true)
printf("输入插入的数据:\\n");
scanf("%d", &val);
if (val == -1)
break;
//先创建新节点
struct LinkNode *newnode = malloc(sizeof(struct LinkNode));
newnode->data = val;
newnode->next = NULL;
//新节点插入到链表中
pRear->next = newnode;
//更新尾部指针指向
pRear = newnode;
return header;
void InsertByValue_LinkList(struct LinkNode *header, int oldval, int newval)
if (NULL == header)
return;
//两个辅助变量指针
struct LinkNode *pPrev = header;
struct LinkNode *pCurrent = pPrev->next;//为后一个指针
while (pCurrent!=NULL)
if (pCurrent->data == oldval)
break;
pPrev = pCurrent;
pCurrent = pCurrent->next;
//先创建节点
struct LinkNode *newnode = malloc(sizeof(struct LinkNode));
newnode->data = newval;
newnode->next = NULL;
//插入数据到链表
pPrev->next = newnode;
newnode->next = pCurrent;
//删除值为val的结点
void RemoveByValue_LinkList(struct LinkNode *header, int delValue)
if (NULL == header)
return;//不执行下面
//两个辅助指针变量
struct LinkNode *pPrev = header;
struct LinkNode *pCurrent = pPrev->next;
while (pCurrent != NULL)
if (pCurrent->data == delValue)
//删除操作
pPrev->next = pCurrent->next;
free(pCurrent);
pCurrent = NULL;
//删除了,pCurrent就为空,指针就不能后移
if (NULL == pCurrent)
return;
pPrev = pCurrent;
pCurrent = pCurrent->next;
//销毁
void Destroy_LinkList(struct LinkNode *header)
if (NULL == header)
return;
//辅助指针变量
struct LinkNode *pCurrent = header;
while (pCurrent != NULL)
//先保存下当前结点的下一个节点地址
struct LinkNode *pNext = pCurrent->next;
//释放当前结点内存
printf("%d节点被销毁!\\n", pCurrent->data);
free(pCurrent);
//指针向后移动
pCurrent = pNext;
//清空
void Clear_LinkList(struct LinkNode *header)
if (NULL == header)
return;
//辅助指针变量
struct LinkNode *pCurrent = header->next;
while (pCurrent != NULL)
//先保存下当前结点的下一个节点地址
struct LinkNode *pNext = pCurrent->next;
//释放当前结点内存
free(pCurrent);
//pCurrent指向下一个节点
pCurrent = pNext;
header->next = NULL;
//遍历
void Foreach_LinkList(struct LinkNode *header)
if (NULL == header)
return;
struct LinkNode *pPrint = header->next;
while (pPrint!= NULL)
printf("%d ", pPrint->data);
pPrint = pPrint->next;
printf("\\n");
3.建立一个测试文件:TestLinkList.c
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"LinkList.h"
void test()
//初始化链表
struct LinkNode *header = Init_LinkList();
//打印输出
Foreach_LinkList(header);
//插入数据
InsertByValue_LinkList(header,20,100);
Foreach_LinkList(header);
//删除节点
RemoveByValue_LinkList(header,10);
printf("删除操作\\n");
Foreach_LinkList(header);
//清空
Clear_LinkList(header);
//销毁
Destroy_LinkList(header);
int main()
test();
system("pause");
return EXIT_SUCCESS;
4.检查结果
以上是关于C语言链表写法,练习链表的主要内容,如果未能解决你的问题,请参考以下文章