单链表头插法
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int val;
struct Node* next;
} Node;
// 单链表
// 初始化
Node* create() {
Node* head;
head = (Node*)malloc(sizeof(Node));
head -> val = 0;
head -> next = NULL;
return head;
}
// 头插法
void insertHead(Node* head, int n) {
Node* p = (Node*)malloc(sizeof(Node));
p -> val = n;
p -> next = head -> next;
head -> next = p;
}
// 在指定位置插入
void insertNode(Node* head, int pos, int n) {
Node* p = head;
for (int i = 0; i < pos - 1; i++) {
p = p -> next;
if (p == NULL) {
return;
}
}
Node* q = (Node*)malloc(sizeof(Node));
q -> val = n;
q -> next = p -> next;
p -> next = q;
}
// 删除指定位置结点
void delete(Node* head, int pos) {
Node* p = head;
for (int i = 0; i < pos - 1; i++) {
p = p -> next;
if (p == NULL) {
return;
}
}
if (p -> next == NULL) {
printf("Error!\n");
return;
}
Node* q = p -> next;
p -> next = q -> next;
free(q);
}
// 遍历(打印链表)
void listNode(Node* head) {
Node* p = head -> next;
while (p != NULL) {
printf("%d ", p -> val);
p = p -> next;
}
}
int main() {
Node* head = create();
int a = 1, b = 2;
insertHead(head, a);
insertHead(head, b);
insertNode(head, 2, 3);
delete(head, 2);
listNode(head);
return 0;
}