用C语言写出单链表ADT
时间: 2023-05-31 11:01:29 浏览: 111
以下是单链表ADT的C语言实现:
```
// 单链表节点结构体
typedef struct ListNode {
int val; // 节点值
struct ListNode *next; // 指向下一个节点的指针
} ListNode;
// 创建一个新的单链表节点
ListNode *createNode(int val) {
ListNode *node = (ListNode *) malloc(sizeof(ListNode));
node->val = val;
node->next = NULL;
return node;
}
// 在单链表的末尾添加一个新节点
void addNode(ListNode *head, int val) {
ListNode *node = createNode(val);
ListNode *cur = head;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = node;
}
// 在单链表的头部插入一个新节点
void insertNode(ListNode **head, int val) {
ListNode *node = createNode(val);
node->next = *head;
*head = node;
}
// 删除单链表中第一个值为val的节点
void deleteNode(ListNode **head, int val) {
ListNode *cur = *head;
ListNode *prev = NULL;
while (cur != NULL && cur->val != val) {
prev = cur;
cur = cur->next;
}
if (cur != NULL) {
if (prev == NULL) {
*head = cur->next;
} else {
prev->next = cur->next;
}
free(cur);
}
}
// 打印单链表中的所有节点值
void printList(ListNode *head) {
ListNode *cur = head;
while (cur != NULL) {
printf("%d ", cur->val);
cur = cur->next;
}
printf("\n");
}
// 释放单链表中的所有节点
void freeList(ListNode *head) {
ListNode *cur = head;
while (cur != NULL) {
ListNode *temp = cur;
cur = cur->next;
free(temp);
}
}
```
使用示例:
```
int main() {
ListNode *head = createNode(1);
addNode(head, 2);
addNode(head, 3);
insertNode(&head, 0);
printList(head); // 输出:0 1 2 3
deleteNode(&head, 2);
printList(head); // 输出:0 1 3
freeList(head);
return 0;
}
```
阅读全文