(1)创建一个带头结点的单链表。 要求:此单链表长度为10;创建完成后,输出显示所创建单链表各结点的值。 (2)实现单链表的插入,并显示完成插入后单链表各结点的值。 要求:插入一个新的结点,其值为27,成为单链表的第5个结点;插入完成后,输出显示此时单链表的长度以及各结点的值。 (3)实现单链表的删除,完成删除后,输出单链表各结点的值。 (4)编程实现单链表的查找。
时间: 2024-02-03 13:11:57 浏览: 33
好的,让我逐步来教你。
首先我们先定义一个节点结构体,包含数据域和指向下一个节点的指针:
```c
struct ListNode {
int val; // 数据域
struct ListNode *next; // 指针域
};
```
接下来我们来创建一个带头结点的单链表,长度为10:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
struct ListNode {
int val; // 数据域
struct ListNode *next; // 指针域
};
int main() {
struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode)); // 创建头节点
head->next = NULL; // 将头节点的指针域置为空
struct ListNode *tail = head; // tail指向最后一个节点
// 创建长度为10的链表
for(int i = 1; i <= 10; i++) {
struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode));
node->val = i;
node->next = NULL;
tail->next = node;
tail = node;
}
// 输出单链表各结点的值
struct ListNode *p = head->next; // 指针指向第一个节点
while(p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
return 0;
}
```
接下来我们来实现单链表的插入,插入一个新的结点,其值为27,成为单链表的第5个结点:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
struct ListNode {
int val; // 数据域
struct ListNode *next; // 指针域
};
int main() {
struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode)); // 创建头节点
head->next = NULL; // 将头节点的指针域置为空
struct ListNode *tail = head; // tail指向最后一个节点
// 创建长度为10的链表
for(int i = 1; i <= 10; i++) {
struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode));
node->val = i;
node->next = NULL;
tail->next = node;
tail = node;
}
// 输出单链表各结点的值
struct ListNode *p = head->next; // 指针指向第一个节点
while(p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
// 插入新节点
struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode));
node->val = 27;
node->next = NULL;
struct ListNode *pre = head; // pre指向头节点
int pos = 4; // 插入位置为第5个节点
while(pos && pre != NULL) {
pre = pre->next;
pos--;
}
if(pre != NULL) {
node->next = pre->next;
pre->next = node;
}
// 输出单链表各结点的值
p = head->next;
while(p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
return 0;
}
```
接下来我们来实现单链表的删除操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
struct ListNode {
int val; // 数据域
struct ListNode *next; // 指针域
};
int main() {
struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode)); // 创建头节点
head->next = NULL; // 将头节点的指针域置为空
struct ListNode *tail = head; // tail指向最后一个节点
// 创建长度为10的链表
for(int i = 1; i <= 10; i++) {
struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode));
node->val = i;
node->next = NULL;
tail->next = node;
tail = node;
}
// 输出单链表各结点的值
struct ListNode *p = head->next; // 指针指向第一个节点
while(p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
// 删除第5个节点
struct ListNode *pre = head; // pre指向头节点
int pos = 4; // 删除位置为第5个节点
while(pos && pre->next != NULL) {
pre = pre->next;
pos--;
}
if(pre->next != NULL) {
struct ListNode *del = pre->next;
pre->next = del->next;
free(del);
}
// 输出单链表各结点的值
p = head->next;
while(p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
return 0;
}
```
最后我们来实现单链表的查找操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
struct ListNode {
int val; // 数据域
struct ListNode *next; // 指针域
};
int main() {
struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode)); // 创建头节点
head->next = NULL; // 将头节点的指针域置为空
struct ListNode *tail = head; // tail指向最后一个节点
// 创建长度为10的链表
for(int i = 1; i <= 10; i++) {
struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode));
node->val = i;
node->next = NULL;
tail->next = node;
tail = node;
}
// 输出单链表各结点的值
struct ListNode *p = head->next; // 指针指向第一个节点
while(p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
// 查找节点值为5的节点
p = head->next;
int target = 5;
while(p != NULL) {
if(p->val == target) {
printf("找到了,它的位置为:%d\n", target);
break;
}
p = p->next;
}
if(p == NULL) {
printf("没找到!\n");
}
return 0;
}
```
完整代码:
阅读全文