可以自定义的单链表的初始化,遍历,插入,删除进行控制的c语言代码
时间: 2023-05-22 22:03:17 浏览: 63
以下是可以自定义的单链表的初始化、遍历、插入、删除进行控制的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
typedef struct list {
int length;
Node *head;
} List;
// 初始化链表,并返回链表头指针
List *initList() {
List *list = (List *) malloc(sizeof(List));
list->length = 0;
list->head = NULL;
return list;
}
// 输出链表的所有数据
void traverse(List *list) {
if (list == NULL || list->head == NULL) {
return;
}
Node *p = list->head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 在头部插入节点
void insertAtHead(List *list, int data) {
Node *node = (Node *) malloc(sizeof(Node));
node->data = data;
node->next = NULL;
if (list->head == NULL) {
list->head = node;
} else {
node->next = list->head;
list->head = node;
}
list->length++;
}
// 在尾部插入节点
void insertAtTail(List *list, int data) {
Node *node = (Node *) malloc(sizeof(Node));
node->data = data;
node->next = NULL;
if (list->head == NULL) {
list->head = node;
} else {
Node *p = list->head;
while (p->next != NULL) {
p = p->next;
}
p->next = node;
}
list->length++;
}
// 按照索引位置插入节点
void insertAtIndex(List *list, int index, int data) {
if (index > list->length || index < 0) {
return;
}
if (index == 0) {
insertAtHead(list, data);
return;
}
if (index == list->length) {
insertAtTail(list, data);
return;
}
Node *node = (Node *) malloc(sizeof(Node));
node->data = data;
node->next = NULL;
Node *p = list->head;
Node *prev = NULL;
int i;
for (i = 0; i < index; i++) {
prev = p;
p = p->next;
}
node->next = p;
prev->next = node;
list->length++;
}
// 删除头节点
void deleteAtHead(List *list) {
if (list->head == NULL) {
return;
}
Node *p = list->head;
list->head = p->next;
free(p);
p = NULL;
list->length--;
}
// 删除尾节点
void deleteAtTail(List *list) {
if (list->head == NULL) {
return;
}
if (list->length == 1) {
deleteAtHead(list);
return;
}
Node *p = list->head;
Node *prev = NULL;
while (p->next != NULL) {
prev = p;
p = p->next;
}
prev->next = NULL;
free(p);
p = NULL;
list->length--;
}
// 删除指定位置的节点
void deleteAtIndex(List *list, int index) {
if (list->head == NULL || index < 0 || index >= list->length) {
return;
}
if (index == 0) {
deleteAtHead(list);
return;
}
if (index == list->length - 1) {
deleteAtTail(list);
return;
}
Node *p = list->head;
Node *prev = NULL;
int i;
for (i = 0; i < index; i++) {
prev = p;
p = p->next;
}
prev->next = p->next;
free(p);
p = NULL;
list->length--;
}
int main() {
List *list = initList();
insertAtHead(list, 1);
insertAtTail(list, 3);
insertAtIndex(list, 1, 2);
traverse(list);
deleteAtHead(list);
deleteAtTail(list);
deleteAtIndex(list, 0);
traverse(list);
return 0;
}
```
对于编程类的问题,ChatGPT可以给出答案,如上面的代码。如果您还有其它问题,请继续提问。