定义单链表类型,创建单链表11(带头结点)
时间: 2024-02-02 07:43:02 浏览: 63
单链表是一种线性数据结构,由一系列节点构成,每个节点包含一个数据元素和一个指向下一个节点的指针。定义单链表类型可以使用结构体来表示,其中包含头结点和指向下一个节点的指针。
以下是一个定义单链表类型的示例代码:
```
typedef struct ListNode {
int data; // 存储数据元素
struct ListNode *next; // 指向下一个节点的指针
} ListNode, *LinkedList;
LinkedList createLinkedList() {
LinkedList head = (LinkedList)malloc(sizeof(ListNode)); // 创建头结点
head->next = NULL; // 初始化为空链表
return head;
}
```
创建一个带头结点的单链表可以通过调用createLinkedList函数来完成。
```
LinkedList list = createLinkedList(); // 创建一个空的单链表
```
接下来,可以使用链表的插入操作向链表中添加元素。
```
// 在链表头部插入一个元素
void insertHead(LinkedList head, int data) {
ListNode *node = (ListNode*)malloc(sizeof(ListNode)); // 创建新节点
node->data = data; // 设置节点的数据元素
node->next = head->next; // 将新节点插入到链表头部
head->next = node;
}
// 在链表尾部插入一个元素
void insertTail(LinkedList head, int data) {
ListNode *node = (ListNode*)malloc(sizeof(ListNode)); // 创建新节点
node->data = data; // 设置节点的数据元素
node->next = NULL; // 将新节点插入到链表尾部
ListNode *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = node;
}
// 在链表中间插入一个元素
void insert(LinkedList head, int pos, int data) {
ListNode *node = (ListNode*)malloc(sizeof(ListNode)); // 创建新节点
node->data = data; // 设置节点的数据元素
ListNode *p = head;
for (int i = 0; i < pos && p->next != NULL; i++) {
p = p->next;
}
node->next = p->next; // 将新节点插入到链表中间
p->next = node;
}
// 在链表中删除一个元素
void removeNode(LinkedList head, int data) {
ListNode *p = head;
while (p->next != NULL) {
if (p->next->data == data) { // 找到要删除的节点
ListNode *tmp = p->next;
p->next = tmp->next; // 将其从链表中删除
free(tmp); // 释放节点内存
break;
}
p = p->next;
}
}
```
使用上述函数,可以将元素插入到链表中,例如:
```
insertHead(list, 1); // 在链表头插入元素1
insertTail(list, 3); // 在链表尾插入元素3
insert(list, 1, 2); // 在链表中间插入元素2
removeNode(list, 2); // 删除元素2
```
这样,就创建了一个带头结点的单链表,其中包含元素1和3。
阅读全文