单链表c语言代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单链表c语言代码
单链表是一种常见的数据结构,它可以用来存储一系列数据,本文将从以下几个方面分别介绍单链表的c语言代码实现。
1. 定义结构体
单链表中的每个节点都包含两个成员,一个是存储数据的成员,一般称为元素或者值,另一个是下一个节点地址的指针。定义一个结构体来表示节点,节点包含元素成员和指针成员。
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
2. 创建新节点
在单链表中添加一个新节点需要先创建一个新的节点对象,然后将新节点对象的next指针指向链表中的下一个节点,最后将链表的头节点指向新节点。
ListNode* createNewNode(int val) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); newNode->val = val;
newNode->next = NULL;
return newNode;
}
3. 添加节点
单链表的增加操作有两种情况,一种是在链表头部增加节点,另一种是在链表尾部加入节点。在链表头部添加节点操作比较简单,只需要将新节点的next指针指向原来的头节点,然后将新节点作为新的头节点即可。在链表尾部添加节点需要遍历整个链表,找到最后一个节点,然后将最后一个节点的next指针指向新节点,最后将链表的尾节点指向新节点。
void addToHead(ListNode** head, int val) {
ListNode* newNode = createNewNode(val);
newNode->next = *head;
*head = newNode;
}
void addToTail(ListNode** head, int val) {
ListNode* newNode = createNewNode(val);
if (*head == NULL) {
*head = newNode;
} else {
ListNode* p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
}
4. 查找节点
在单链表中查找节点需要遍历整个链表,逐个比较链表中每个节点的值,直到找到目标节点或者遍历到链表的末尾。
ListNode* findNode(ListNode* head, int val) {
ListNode* p = head;
while (p != NULL) {
if (p->val == val) {
return p;
}
p = p->next;
}
return NULL;
}
5. 删除节点
在单链表中删除节点需要先查找到目标节点,然后将目标节点的上一个节点的next指针指向目标节点的下一个节点,最后释放目标节点的内存空间。
bool deleteNode(ListNode** head, int val) {
ListNode* p = *head;
ListNode* pre = NULL;
while (p != NULL) {
if (p->val == val) {
if (pre == NULL) {
*head = p->next;
} else {
pre->next = p->next;
}
free(p);
return true;
}
pre = p;
p = p->next;
}
return false;
}
以上就是单链表c语言代码实现的基本步骤。通过以上代码的实现,我们可以非常容易地插入、查找和删除链表中的元素。这些代码实现能够帮助我们更好地理解单链表的实现原理,并且在实际的开发中也有很广泛的应用。