用C++创建一个带头结点的单链表,此单链表长度为 10,插入一个新的结点,其值为 27,成为单链表的第 5 个结点,删除第2个结点,查找元素5和元素11
时间: 2023-06-09 13:05:03 浏览: 48
对于你的问题,我可以提供以下C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
//定义单链表结构体节点
typedef struct node {
int data; //数据域
struct node *next; //指针域
} ListNode;
//创建带头结点的单链表
ListNode *createList() {
ListNode *head = (ListNode*)malloc(sizeof(ListNode));
head->next = NULL; //初始为空链表
return head;
}
//在第pos个位置插入新节点
void insertNode(ListNode *head, int pos, int value) {
int i = 0;
ListNode *p = head;
//查找要插入位置的前一个节点
while (i < pos-1 && p != NULL) {
p = p->next;
i++;
}
if (p == NULL || i > pos-1) {
printf("插入位置不合法!\n");
return;
}
//新建节点
ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = value;
//插入节点
newNode->next = p->next;
p->next = newNode;
printf("插入成功!\n");
}
//删除第pos个节点
void deleteNode(ListNode *head, int pos) {
int i = 0;
ListNode *p = head;
//查找要删除节点的前一个节点
while (i < pos-1 && p != NULL) {
p = p->next;
i++;
}
if (p == NULL || p->next == NULL || i > pos-1) {
printf("删除位置不合法!\n");
return;
}
//删除节点
ListNode *q = p->next;
p->next = q->next;
free(q);
printf("删除成功!\n");
}
//查找元素值为value的节点序号
int searchNode(ListNode *head, int value) {
int pos = 0;
ListNode *p = head->next;
//遍历链表查找节点
while (p != NULL) {
pos++;
if (p->data == value) {
return pos;
}
p = p->next;
}
printf("未找到该元素!\n");
return 0;
}
int main() {
ListNode *head = createList(); //创建空链表
//逐个插入元素
for (int i = 1; i <= 10; i++) {
insertNode(head, i, i);
}
//插入新节点
insertNode(head, 5, 27);
//删除节点
deleteNode(head, 2);
//查找节点
int pos1 = searchNode(head, 5);
int pos2 = searchNode(head, 11);
printf("元素5的位置为:%d\n", pos1);
printf("元素11的位置为:%d\n", pos2);
return 0;
}
```
希望以上代码能够满足你的需求,如有疑问请随时提出。感谢你对我的提问,期待与你的下一次对话。