如何用c语言制作单链表
#include
#include
typedef struct Node {
int data;
struct Node* next;
} Node;
Node* initializeLinkedList() {
Node* head = NULL;
return head;
}
void insertAtHead(Node head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
void insertAtTail(Node head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
return;
}
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
void insertAfter(Node* prevNode, int data) {
if (prevNode == NULL) {
printf("Previous node cannot be NULL.n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = prevNode->next;
prevNode->next = newNode;
}
void deleteNode(Node head, int key) {
Node* temp = *head;
Node* prev = NULL;
if (temp != NULL && temp->data == key) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) return;
prev->next = temp->next;
free(temp);
}
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULLn");
}
int main() {
Node* head = initializeLinkedList();
insertAtHead(&head, 1);
insertAtHead(&head, 2);
insertAtTail(&head, 3);
insertAfter(head->next, 4);
printf("Linked List: ");
printList(head);
deleteNode(&head, 2);
printf("After deleting 2: ");
printList(head);
return 0;
}