前插法创建单链表代码c
时间: 2024-10-10 15:02:59 浏览: 18
前插法是一种在已排序的单链表中插入新元素的常见方法。在这种算法中,我们首先找到新值应该插入的位置,然后将新节点插入到该位置之前。以下是使用C语言实现的简单前插法创建单链表的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 插入函数,前插法
Node* insertBefore(Node* head, int target, int value) {
if (head == NULL || head->data == target) { // 如果链表为空或目标等于头结点的数据
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = head;
return newNode;
}
Node* current = head;
while (current->next != NULL && current->next->data < target) {
current = current->next; // 找到目标值前一个节点
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = current->next; // 插入新节点
current->next = newNode;
return head;
}
// 添加元素示例
int main() {
Node* head = NULL;
head = insertBefore(head, 5, 4); // 在值为5的节点前插入4
head = insertBefore(head, 7, 6); // 在值为7的节点前插入6
// 打印链表
Node* temp = head;
printf("Linked list after insertion:\n");
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
return 0;
}
```
在这个例子中,`insertBefore`函数遍历链表找到目标值前的位置,然后创建一个新的节点并插入。在`main`函数里,我们先初始化一个空链表,然后插入一些节点。
阅读全文