带头节点的单链表创建,打印,插入第i个位置x,删除第i个位置元素的c语言代码
时间: 2023-05-15 13:06:09 浏览: 191
以下是带头节点的单链表创建、打印、插入第i个位置x、删除第i个位置元素的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
// 创建带头节点的单链表
ListNode* createList() {
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
head->next = NULL;
ListNode* tail = head;
int x;
while (scanf("%d", &x) != EOF) {
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->val = x;
node->next = NULL;
tail->next = node;
tail = node;
}
return head;
}
// 打印带头节点的单链表
void printList(ListNode* head) {
ListNode* p = head->next;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
}
// 插入第i个位置x
void insert(ListNode* head, int i, int x) {
ListNode* p = head;
int j = 0;
while (p != NULL && j < i - 1) {
p = p->next;
j++;
}
if (p == NULL || j > i - 1) {
printf("插入位置无效\n");
return;
}
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->val = x;
node->next = p->next;
p->next = node;
}
// 删除第i个位置元素
void delete(ListNode* head, int i) {
ListNode* p = head;
int j = 0;
while (p != NULL && j < i - 1) {
p = p->next;
j++;
}
if (p == NULL || p->next == NULL || j > i - 1) {
printf("删除位置无效\n");
return;
}
ListNode* q = p->next;
p->next = q->next;
free(q);
}
int main() {
ListNode* head = createList();
printList(head);
insert(head, 3, 100);
printList(head);
delete(head, 2);
printList(head);
return 0;
}
```
注意:这段代码只是一个示例,实际使用时需要根据具体需求进行修改和完善。
阅读全文