用C语言编写不带头结点单链表的插入操作和删除操作算法
时间: 2024-05-11 17:15:26 浏览: 122
单链表的插入操作和删除操作算法如下:
插入操作:
1. 如果链表为空,则直接将新节点作为链表的头节点。
2. 如果链表不为空,则从头节点开始遍历链表,找到待插入节点的位置。
3. 将新节点插入到该位置,并将该节点的next指针指向下一个节点。
示例代码:
```c
typedef struct Node {
int data;
struct Node *next;
} Node;
void insert(Node **head, int data, int position) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
return;
}
if (position == 0) {
newNode->next = *head;
*head = newNode;
return;
}
Node *current = *head;
int i = 0;
while (i < position - 1 && current->next != NULL) {
current = current->next;
i++;
}
newNode->next = current->next;
current->next = newNode;
}
```
删除操作:
1. 如果链表为空,则直接返回。
2. 如果要删除的节点是头节点,则将头节点指针指向下一个节点。
3. 从头节点开始遍历链表,找到待删除节点的位置。
4. 将该节点的前一个节点的next指针指向下一个节点。
示例代码:
```c
void delete(Node **head, int position) {
if (*head == NULL) {
return;
}
Node *temp = *head;
if (position == 0) {
*head = (*head)->next;
free(temp);
return;
}
int i = 0;
while (i < position - 1 && temp->next != NULL) {
temp = temp->next;
i++;
}
if (temp == NULL || temp->next == NULL) {
return;
}
Node *nextNode = temp->next->next;
free(temp->next);
temp->next = nextNode;
}
```
阅读全文