用c语言建立带头结点的单链表
时间: 2024-05-08 19:17:05 浏览: 128
```
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点
typedef struct Node {
int data; // 数据域
struct Node *next; // 指针域
} Node, *LinkedList;
// 初始化链表
LinkedList initLinkedList() {
LinkedList head = (LinkedList)malloc(sizeof(Node));
head->next = NULL;
return head;
}
// 插入节点,将新节点插入到链表的第i个位置
void insertNode(LinkedList head, int i, int data) {
Node *p = head;
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
// 找到第i个节点的前一个节点
int j = 0;
while (p && j < i - 1) {
p = p->next;
j++;
}
// 插入新节点
if (p) {
newNode->next = p->next;
p->next = newNode;
}
}
// 删除节点,删除链表的第i个节点
void deleteNode(LinkedList head, int i) {
Node *p = head;
Node *q;
// 找到第i个节点和它的前一个节点
int j = 0;
while (p->next && j < i - 1) {
p = p->next;
j++;
}
// 删除第i个节点
if (p->next) {
q = p->next;
p->next = q->next;
free(q);
}
}
// 遍历链表
void traverseLinkedList(LinkedList head) {
Node *p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
LinkedList head = initLinkedList();
// 插入节点
insertNode(head, 1, 10);
insertNode(head, 2, 20);
insertNode(head, 3, 30);
// 遍历链表
traverseLinkedList(head);
// 删除节点
deleteNode(head, 2);
// 遍历链表
traverseLinkedList(head);
return 0;
}
```
阅读全文