提示信息

C语言链表基本操作:增、删、改、查、遍历解析

尘埃 已关注

链表是一种常用的数据结构,它由节点(Node)组成,每个节点包含数据和一个指向下一个节点的指针。在C语言中,链表的基本操作包括增、删、改、查和遍历。以下是对这些操作的解析:

1. 链表节点定义

首先,需要定义一个节点结构:

  1. typedef struct Node {
  2. int data;
  3. struct Node* next;
  4. } Node;

2. 增加节点

在链表中增加节点可以在头部、尾部和中间位置。以下是三种情况的代码示例:

a. 在链表头部增加节点

  1. void insertAtHead(Node** head, int newData) {
  2. Node* newNode = (Node*)malloc(sizeof(Node));
  3. newNode->data = newData;
  4. newNode->next = *head;
  5. *head = newNode;
  6. }

b. 在链表尾部增加节点

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

c. 在链表中间位置增加节点(在指定节点后)

  1. void insertAfterNode(Node* prevNode, int newData) {
  2. if (prevNode == NULL) {
  3. printf("The previous node cannot be NULL\n");
  4. return;
  5. }
  6. Node* newNode = (Node*)malloc(sizeof(Node));
  7. newNode->data = newData;
  8. newNode->next = prevNode->next;
  9. prevNode->next = newNode;
  10. }

3. 删除节点

可以删除指定值的节点或特定位置的节点。

a. 删除指定值的节点

  1. void deleteNodeByValue(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. }

4. 修改节点数据

需要遍历链表找到目标节点,然后修改其数据。

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

5. 查找节点

查找特定值的节点,并返回其指针。

  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; // 说明链表中不存在该值
  10. }

6. 遍历链表

遍历链表从头到尾,通常用于输出所有节点的数据。

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

以上是C语言中常见的链表基本操作的实现,每个函数都包含了创建、修改、和删除节点所需的逻辑。在实际使用中,一定要注意内存管理,尤其是在删除操作时确保合适的节点释放,以防内存泄漏。

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

最近一次登录:2024-11-20 00:19:07   

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