1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
| #include <stdio.h> #include <stdlib.h>
struct Node { int data; struct Node *next; };
struct Node* createNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); if (newNode == NULL) { printf("内存分配失败\n"); exit(1); } newNode->data = data; newNode->next = NULL; return newNode; }
struct Node* insertAtBeginning(struct Node *head, int data) { struct Node *newNode = createNode(data); newNode->next = head; return newNode; }
void insertAtEnd(struct Node *head, int data) { struct Node *newNode = createNode(data); struct Node *temp = head; while (temp->next != NULL) { temp = temp->next; } temp->next = newNode; }
struct Node* deleteNode(struct Node *head, int data) { struct Node *current = head; struct Node *prev = NULL;
while (current != NULL && current->data != data) { prev = current; current = current->next; }
if (current != NULL) { if (prev == NULL) { head = current->next; } else { prev->next = current->next; } free(current); }
return head; }
void printList(struct Node *head) { struct Node *temp = head; while (temp != NULL) { printf("%d ", temp->data); temp = temp->next; } printf("\n"); }
void freeList(struct Node *head) { struct Node *temp; while (head != NULL) { temp = head; head = head->next; free(temp); } }
int main() { struct Node *head = NULL;
head = insertAtBeginning(head, 10); head = insertAtBeginning(head, 20); head = insertAtBeginning(head, 30);
insertAtEnd(head, 40); insertAtEnd(head, 50);
printf("链表内容:\n"); printList(head);
head = deleteNode(head, 20);
printf("删除后的链表内容:\n"); printList(head);
freeList(head);
return 0; }
|