用C语言编译单链表基本操作的实现
时间: 2024-05-11 13:14:19 浏览: 87
C语言编写的单链表基本操作
以下是单链表基本操作的实现,包括创建、插入、删除、打印等。
```c
#include <stdio.h>
#include <stdlib.h>
//定义链表结点结构体
typedef struct Node {
int data;
struct Node *next;
} Node;
//创建链表
Node *createList() {
Node *head = (Node *) malloc(sizeof(Node));
head->next = NULL;
Node *p = head;
int num;
printf("请输入链表结点数:");
scanf("%d", &num);
int i;
for (i = 0; i < num; i++) {
Node *node = (Node *) malloc(sizeof(Node));
printf("请输入第%d个结点的值:", i+1);
scanf("%d", &node->data);
node->next = NULL;
p->next = node;
p = node;
}
return head;
}
//插入结点
void insertNode(Node *head, int index, int value) {
Node *p = head;
int i;
for (i = 0; i < index-1; i++) {
p = p->next;
if (p == NULL) {
printf("插入位置不合法!\n");
return;
}
}
Node *node = (Node *) malloc(sizeof(Node));
node->data = value;
node->next = p->next;
p->next = node;
}
//删除结点
void deleteNode(Node *head, int index) {
Node *p = head;
int i;
for (i = 0; i < index-1; i++) {
p = p->next;
if (p == NULL || p->next == NULL) {
printf("删除位置不合法!\n");
return;
}
}
Node *q = p->next;
p->next = q->next;
free(q);
}
//打印链表
void printList(Node *head) {
Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Node *head = createList();
printf("原链表:");
printList(head);
insertNode(head, 2, 5);
printf("插入结点后的链表:");
printList(head);
deleteNode(head, 3);
printf("删除结点后的链表:");
printList(head);
return 0;
}
```
阅读全文