编写一段c++代码,实现链表的插入删除
时间: 2023-11-09 09:06:58 浏览: 80
下面是一个简单的链表实现,包括插入和删除操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 链表结构体
typedef struct node {
int data; // 数据域
struct node* next; // 指针域
} Node;
// 创建新节点
Node* newNode(int data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
return node;
}
// 插入节点
void insert(Node** head, int data) {
Node* node = newNode(data);
node->next = *head; // 新节点指向原头节点
*head = node; // 头节点更新为新节点
}
// 删除节点
void delete(Node** head, int data) {
Node* prev = NULL;
Node* curr = *head;
while (curr != NULL && curr->data != data) {
prev = curr;
curr = curr->next;
}
if (curr == NULL) {
printf("Node not found\n");
return;
}
if (prev == NULL) {
*head = curr->next; // 要删除的是头节点,头节点更新为下一个节点
} else {
prev->next = curr->next; // 直接跳过当前节点
}
free(curr);
}
// 打印链表
void printList(Node* head) {
printf("List: ");
Node* curr = head;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
}
int main() {
Node* head = NULL;
insert(&head, 1);
insert(&head, 2);
insert(&head, 3);
printList(head);
delete(&head, 2);
printList(head);
delete(&head, 4);
printList(head);
return 0;
}
```
这段代码定义了一个链表结构体 `Node`,包含一个数据域 `data` 和一个指针域 `next`,表示下一个节点。`newNode` 函数用于创建新节点,`insert` 函数用于插入节点,`delete` 函数用于删除节点。这些函数都以指向指针的指针作为参数,可以改变头节点的值。最后的 `main` 函数演示了如何使用这些函数。
阅读全文