单链表的输入和插入和删除
时间: 2024-03-14 21:25:23 浏览: 53
单链表是一种常见的数据结构,它由一系列结点组成,每个结点包含一个数据元素和一个指向下一个结点的指针。
单链表的输入、插入和删除操作如下:
1. 输入操作:创建一个空的单链表,并为其设置头结点,头结点的指针域为空。
2. 插入操作:在单链表中插入一个新结点,需要先找到插入位置的前一个结点,然后将新结点插入到该位置。具体步骤如下:
(1)找到插入位置的前一个结点 p;
(2)创建一个新结点,并将数据元素赋值给新结点的数据域;
(3)将新结点的指针域指向 p 的下一个结点;
(4)将 p 的指针域指向新结点。
3. 删除操作:在单链表中删除一个结点,需要先找到待删除结点的前一个结点,然后将其指针域指向待删除结点的下一个结点。具体步骤如下:
(1)找到待删除结点的前一个结点 p;
(2)将 p 的指针域指向待删除结点的下一个结点。
需要注意的是,在插入和删除操作中,需要考虑边界条件,例如插入位置在链表头结点之前、链表为空等情况。
相关问题
单链表的输入和插入和删除的代码
以下是单链表的输入、插入和删除代码示例:
定义单链表结构体:
```c
struct ListNode {
int val;
struct ListNode *next;
};
```
输入单链表:
```c
struct ListNode* createList() {
struct ListNode *head, *p, *q;
head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next = NULL;
p = head;
int n, val;
printf("请输入单链表的长度:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入第%d个节点的值:", i+1);
scanf("%d", &val);
q = (struct ListNode*)malloc(sizeof(struct ListNode));
q->val = val;
q->next = NULL;
p->next = q;
p = p->next;
}
return head->next;
}
```
插入节点:
```c
struct ListNode* insertNode(struct ListNode *head, int index, int val) {
struct ListNode *p, *q;
p = head;
for (int i = 0; i < index - 1; i++) {
if (p == NULL) {
printf("插入位置无效!\n");
return head;
}
p = p->next;
}
q = (struct ListNode*)malloc(sizeof(struct ListNode));
q->val = val;
q->next = p->next;
p->next = q;
return head;
}
```
删除节点:
```c
struct ListNode* deleteNode(struct ListNode *head, int index) {
struct ListNode *p, *q;
p = head;
for (int i = 0; i < index - 1; i++) {
if (p == NULL || p->next == NULL) {
printf("删除位置无效!\n");
return head;
}
p = p->next;
}
q = p->next;
p->next = q->next;
free(q);
return head;
}
```
试编写在单链表上实现插入和删除的算法。用c语言插入元素自主输入
在单链表上实现插入和删除元素的算法可以通过以下步骤进行:
1. 插入元素:
- 创建一个新节点,并为其分配内存空间。
- 将要插入的元素赋值给新节点的数据域。
- 将新节点的指针域指向原链表中要插入位置的下一个节点。
- 将原链表中要插入位置的前一个节点的指针域指向新节点。
2. 删除元素:
- 找到要删除的节点的前一个节点。
- 将前一个节点的指针域指向要删除节点的下一个节点。
- 释放要删除节点的内存空间。
下面是一个用C语言实现单链表插入和删除元素的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
struct Node {
int data;
struct Node* next;
};
// 在链表中插入元素
void insert(struct Node** head, int value) {
// 创建新节点
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
newNode->next = NULL;
// 如果链表为空,直接将新节点作为头节点
if (*head == NULL) {
*head = newNode;
return;
}
// 找到链表尾部节点
struct Node* tail = *head;
while (tail->next != NULL) {
tail = tail->next;
}
// 将新节点插入到链表尾部
tail->next = newNode;
}
// 在链表中删除元素
void remove(struct Node** head, int value) {
// 如果链表为空,直接返回
if (*head == NULL) {
return;
}
// 如果要删除的节点是头节点
if ((*head)->data == value) {
struct Node* temp = *head;
*head = (*head)->next;
free(temp);
return;
}
// 找到要删除节点的前一个节点
struct Node* prev = *head;
while (prev->next != NULL && prev->next->data != value) {
prev = prev->next;
}
// 如果找到了要删除的节点
if (prev->next != NULL) {
struct Node* temp = prev->next;
prev->next = temp->next;
free(temp);
}
}
// 打印链表元素
void printList(struct Node* head) {
struct Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
struct Node* head = NULL;
// 插入元素
int value;
printf("请输入要插入的元素(输入-1结束):");
while (scanf("%d", &value) && value != -1) {
insert(&head, value);
printf("请输入要插入的元素(输入-1结束):");
}
// 打印链表
printf("链表元素:");
printList(head);
// 删除元素
printf("请输入要删除的元素:");
scanf("%d", &value);
remove(&head, value);
// 打印链表
printf("删除后的链表元素:");
printList(head);
return 0;
}
```
相关推荐
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)