如何用c语言制作单链表

📅 2026-01-21 11:51:45 ✍️ admin 👁️ 5957 ❤️ 975
如何用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;

}