1.问题描述 单链表初始为空,给定插入位置和数据,插入结点实现单链表的创建。假设单链表中的结点计数从1开始。 2.算法 单链表结点的存储结构包含两部分:数据、下一结点指针 单链表的查找:给出位置i,若第i个结点存在(1<=i<=表中结点数L),返回结点地址;否则,返回NULL。 单链表的插入:给出位置i和数据e,在单链表第i(1<=i<=L+1)个结点位置插入新结点,数据为e。
时间: 2023-06-25 21:01:58 浏览: 96
链表插入结点算法
算法实现如下:
1. 定义单链表的结构体Node,包含数据data和指向下一个结点的指针next。
2. 定义单链表的头指针head,初始值为NULL。
3. 定义插入结点的函数insertNode,参数为插入位置pos和插入数据data。
4. 首先创建一个新结点newNode,将数据data赋值给newNode的data成员,将newNode的next指针指向NULL。
5. 如果插入位置为1,即在单链表的头部插入结点,将newNode的next指针指向head,将head指向newNode。
6. 如果插入位置不为1,则需要先查找到第pos-1个结点,将newNode的next指针指向第pos个结点的next指针所指向的结点,将第pos-1个结点的next指针指向newNode。
7. 插入完成后,单链表的结点数加1。
8. 查找结点的函数searchNode,参数为查找位置pos。
9. 从头结点开始遍历单链表,查找到第pos个结点时返回该结点的地址,如果遍历完整个单链表仍未找到,则返回NULL。
完整代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
Node* head = NULL;
void insertNode(int pos, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (pos == 1) {
newNode->next = head;
head = newNode;
} else {
Node* prev = head;
for (int i = 1; i < pos - 1; i++) {
prev = prev->next;
if (prev == NULL) {
printf("插入位置无效\n");
return;
}
}
newNode->next = prev->next;
prev->next = newNode;
}
printf("插入成功\n");
}
Node* searchNode(int pos) {
if (pos <= 0) {
printf("查找位置无效\n");
return NULL;
}
Node* cur = head;
for (int i = 1; i < pos; i++) {
if (cur == NULL) {
printf("查找位置无效\n");
return NULL;
}
cur = cur->next;
}
return cur;
}
int main() {
insertNode(1, 10);
insertNode(2, 20);
insertNode(3, 30);
Node* node = searchNode(2);
if (node != NULL) {
printf("第%d个结点的值为%d\n", 2, node->data);
}
return 0;
}
```
阅读全文