用c语言编写一段代码实现单链表的建立、输出、插入、删除、判断链表是否为空、输出链表长度,并且当用户输入1时为插入操作
时间: 2023-08-01 21:15:05 浏览: 71
实现单链表的建立、插入与删除
3星 · 编辑精心推荐
好的,以下是基于C语言的单链表实现,包括建立、输出、插入、删除、判断链表是否为空、输出链表长度的功能。当用户输入1时,实现插入操作。
```c
#include <stdio.h>
#include <stdlib.h>
//定义单链表结构体
typedef struct Node {
int val; //值
struct Node *next; //指向下一个节点的指针
} ListNode;
//创建单链表
ListNode* createList(int n) {
ListNode *head = NULL, *tail = NULL;
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
ListNode *node = (ListNode*) malloc(sizeof(ListNode));
node->val = x;
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
//输出单链表
void printList(ListNode *head) {
ListNode *p = head;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
}
//插入节点
ListNode* insertNode(ListNode *head) {
printf("请输入要插入的节点值:");
int x;
scanf("%d", &x);
ListNode *node = (ListNode*) malloc(sizeof(ListNode));
node->val = x;
node->next = NULL;
if (head == NULL) {
head = node;
} else {
ListNode *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = node;
}
return head;
}
//删除节点
ListNode* deleteNode(ListNode *head) {
printf("请输入要删除的节点值:");
int x;
scanf("%d", &x);
ListNode *p = head, *pre = NULL;
while (p != NULL && p->val != x) {
pre = p;
p = p->next;
}
if (p == NULL) {
printf("该节点不存在\n");
return head;
}
if (pre == NULL) {
head = p->next;
} else {
pre->next = p->next;
}
free(p);
return head;
}
//判断链表是否为空
int isEmpty(ListNode *head) {
return head == NULL;
}
//输出链表长度
int getLength(ListNode *head) {
int cnt = 0;
ListNode *p = head;
while (p != NULL) {
cnt++;
p = p->next;
}
return cnt;
}
int main() {
printf("请输入单链表长度:");
int n;
scanf("%d", &n);
ListNode *head = createList(n);
printf("初始链表:");
printList(head);
int op = 0;
printf("请输入操作编号(1:插入,2:删除):");
scanf("%d", &op);
if (op == 1) {
head = insertNode(head);
} else if (op == 2) {
head = deleteNode(head);
}
printf("操作后的链表:");
printList(head);
printf("链表%s为空\n", isEmpty(head) ? "" : "不");
printf("链表长度为%d\n", getLength(head));
return 0;
}
```
以上代码实现了单链表的建立、输出、插入、删除、判断链表是否为空、输出链表长度的功能。当用户输入1时,实现插入操作。
阅读全文