#include <stdio.h>#include <stdlib.h>
// 链表节点结构体typedef struct ListNode { int data; // 节点数据 struct ListNode *next; // 下一个节点的指针} ListNode;
// 创建一个新节点ListNode *createNode(int data) { ListNode *node = (ListNode*) malloc(sizeof(ListNode)); node->data = data; node->next = NULL; return node;}
// 在链表头部插入一个新节点ListNode *insertNodeAtHead(ListNode *head, int data) { ListNode *node = createNode(data); node->next = head; return node;}
// 在链表尾部插入一个新节点ListNode *insertNodeAtTail(ListNode *head, int data) { ListNode *node = createNode(data); if(head == NULL) { return node; } else { ListNode *current = head; while(current->next != NULL) { current = current->next; } current->next = node; return head; }}
// 删除链表中第一个值为data的节点ListNode *deleteNode(ListNode *head, int data) { if(head == NULL) { return NULL; } if(head->data == data) { ListNode *current = head; head = head->next; free(current); return head; } ListNode *current = head; while(current->next != NULL && current->next->data != data) { current = current->next; } if(current->next != NULL) { ListNode *deleteNode = current->next; current->next = deleteNode->next; free(deleteNode); } return head;}
// 修改链表中第一个值为oldData的节点的数据为newDatavoid updateNode(ListNode *head, int oldData, int newData) { ListNode *current = head; while(current != NULL) { if(current->data == oldData) { current->data = newData; break; } else { current = current->next; } }}
// 遍历链表void traverseList(ListNode *head) { ListNode *current = head; while(current != NULL) { printf("%d ", current->data); current = current->next; } printf("\n");}
// 清空链表,释放所有节点的内存空间void clearList(ListNode *head) { while(head != NULL) { ListNode *current = head; head = head->next; free(current); }}
// 示例程序int main() { ListNode *head = NULL; head = insertNodeAtHead(head, 1); head = insertNodeAtHead(head, 2); head = insertNodeAtTail(head, 3); traverseList(head); head = deleteNode(head, 2); traverseList(head); updateNode(head, 1, 4); traverseList(head); clearList(head); return 0;}
评论