用c语言写一个删除链表数据的chengx
时间: 2023-03-10 12:56:07 浏览: 75
首先定义一个结构体,用来存储链表中的数据:struct node {
int data;
struct node *next;
}然后写一个函数,用来删除链表中指定的数据:void deleteNode(struct node **head, int data) {
struct node *temp = *head, *prev;
// 如果头节点的数据值与要删除的数据值相同,则重置头节点
if (temp != NULL && temp->data == data) {
*head = temp->next;
free(temp);
return;
}
// 在链表中寻找要删除的数据
while (temp != NULL && temp->data != data) {
prev = temp;
temp = temp->next;
}
// 如果数据没有被找到,则返回
if (temp == NULL) return;
// 找到要删除的节点,将其从链表中删除
prev->next = temp->next;
free(temp);
}
相关问题
用C语言写一个循环链表
好的,我会为您提供C语言的循环链表代码示例。
首先,我们需要定义一个链表节点的结构体,如下所示:
```
typedef struct node {
int data;
struct node *next;
} Node;
```
其中,`data` 用来存储节点的数据,`next` 则指向下一个节点。
接下来,我们需要定义循环链表,并实现以下操作:
1. 初始化链表
```
void initList(Node **head) {
*head = NULL;
}
```
2. 在链表末尾添加节点
```
void append(Node **head, int data) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
if (*head == NULL) {
newNode->next = newNode;
*head = newNode;
} else {
newNode->next = (*head)->next;
(*head)->next = newNode;
*head = newNode;
}
}
```
3. 删除指定位置的节点
```
void delete(Node **head, int position) {
if (*head == NULL) {
return;
}
Node *current = *head;
Node *prev = NULL;
int i = 0;
while (i != position) {
prev = current;
current = current->next;
i++;
if (current == *head) {
return; // 到达链表末尾,没有找到指定位置的节点
}
}
if (current == *head) {
*head = prev;
}
prev->next = current->next;
free(current);
}
```
4. 打印链表中每个节点的数据
```
void printList(Node *head) {
if (head == NULL) {
return;
}
Node *current = head->next;
do {
printf("%d ", current->data);
current = current->next;
} while (current != head);
}
```
使用这些操作,我们可以轻松地创建、修改和打印循环链表。完整的示例代码如下:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
void initList(Node **head) {
*head = NULL;
}
void append(Node **head, int data) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
if (*head == NULL) {
newNode->next = newNode;
*head = newNode;
} else {
newNode->next = (*head)->next;
(*head)->next = newNode;
*head = newNode;
}
}
void delete(Node **head, int position) {
if (*head == NULL) {
return;
}
Node *current = *head;
Node *prev = NULL;
int i = 0;
while (i != position) {
prev = current;
current = current->next;
i++;
if (current == *head) {
return;
}
}
if (current == *head) {
*head = prev;
}
prev->next = current->next;
free(current);
}
void printList(Node *head) {
if (head == NULL) {
return;
}
Node *current = head->next;
do {
printf("%d ", current->data);
current = current->next;
} while (current != head);
}
int main() {
Node *head;
initList(&head);
append(&head, 1);
append(&head, 2);
append(&head, 3);
append(&head, 4);
printList(head);
delete(&head, 2);
printList(head);
return 0;
}
```
用c语言写一个静态链表
可以使用结构体和指针来实现静态链表。首先定义一个结构体,包含数据和指向下一个节点的指针。然后定义一个数组来存储这些节点,每个节点的下标就是它的地址。最后,使用指针来操作这些节点,实现链表的功能。
以下是一个简单的静态链表的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct Node {
int data;
int next;
} Node;
Node list[MAX_SIZE];
int head = -1;
void init() {
for (int i = ; i < MAX_SIZE; i++) {
list[i].next = -2;
}
}
void add(int data) {
int i = ;
while (list[i].next != -2) {
i = list[i].next;
}
list[i].next = head;
head = i + 1;
list[head - 1].data = data;
}
void print() {
int i = head;
while (i != -1) {
printf("%d ", list[i - 1].data);
i = list[i - 1].next;
}
printf("\n");
}
int main() {
init();
add(1);
add(2);
add(3);
print();
return ;
}
```
这个代码实现了一个简单的静态链表,可以添加数据并打印链表中的所有数据。