单链表c语言代码

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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语言代码实现的基本步骤。通过以上代码的实现,我们可以非常容易地插入、查找和删除链表中的元素。这些代码实现能够帮助我们更好地理解单链表的实现原理,并且在实际的开发中也有很广泛的应用。

相关文档
最新文档