提示信息

C语言实现的单链表基本操作

痕迹 已关注

在C语言中,实现单链表的基本操作主要包括创建链表、插入节点、删除节点、查找节点和遍历链表等。以下是各个操作的基本实现:

单链表节点定义

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. // 定义单链表节点结构
  4. typedef struct Node {
  5. int data;
  6. struct Node *next;
  7. } Node;

创建节点

  1. Node* createNode(int data) {
  2. Node* newNode = (Node*)malloc(sizeof(Node));
  3. if (newNode == NULL) {
  4. printf("Memory allocation failed\n");
  5. exit(1);
  6. }
  7. newNode->data = data;
  8. newNode->next = NULL;
  9. return newNode;
  10. }

插入节点

在链表末尾插入节点

  1. void insertAtEnd(Node** head, int data) {
  2. Node* newNode = createNode(data);
  3. if (*head == NULL) {
  4. *head = newNode;
  5. return;
  6. }
  7. Node* temp = *head;
  8. while (temp->next != NULL) {
  9. temp = temp->next;
  10. }
  11. temp->next = newNode;
  12. }

在链表开头插入节点

  1. void insertAtBeginning(Node** head, int data) {
  2. Node* newNode = createNode(data);
  3. newNode->next = *head;
  4. *head = newNode;
  5. }

删除节点

删除指定值的节点

  1. void deleteNode(Node** head, int key) {
  2. Node* temp = *head;
  3. Node* prev = NULL;
  4. // 如果要删除的节点是头节点
  5. if (temp != NULL && temp->data == key) {
  6. *head = temp->next;
  7. free(temp);
  8. return;
  9. }
  10. // 查找要删除的节点
  11. while (temp != NULL && temp->data != key) {
  12. prev = temp;
  13. temp = temp->next;
  14. }
  15. // 如果没有找到该节点
  16. if (temp == NULL) return;
  17. // 断开链表并删除节点
  18. prev->next = temp->next;
  19. free(temp);
  20. }

查找节点

  1. Node* searchNode(Node* head, int key) {
  2. Node* current = head;
  3. while (current != NULL) {
  4. if (current->data == key) {
  5. return current;
  6. }
  7. current = current->next;
  8. }
  9. return NULL; // 如果没找到,返回NULL
  10. }

遍历链表

  1. void printList(Node* head) {
  2. Node* temp = head;
  3. while (temp != NULL) {
  4. printf("%d -> ", temp->data);
  5. temp = temp->next;
  6. }
  7. printf("NULL\n");
  8. }

示例使用

  1. int main() {
  2. Node* head = NULL;
  3. insertAtEnd(&head, 10);
  4. insertAtEnd(&head, 20);
  5. insertAtBeginning(&head, 5);
  6. printList(head);
  7. deleteNode(&head, 20);
  8. printList(head);
  9. Node* foundNode = searchNode(head, 10);
  10. if (foundNode != NULL) {
  11. printf("Node found with value: %d\n", foundNode->data);
  12. } else {
  13. printf("Node not found.\n");
  14. }
  15. return 0;
  16. }

这个示例展示了如何使用上述函数来实现和操作一个简单的单链表。确保在实际的程序中对内存分配进行适当的检查和释放,以防止内存泄漏。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
痕迹 关注 已关注

最近一次登录:2024-11-20 21:11:46   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图