带头结点单链表应用实例
时间: 2023-05-23 08:04:44 浏览: 114
一个常见的应用实例是实现链表的基本操作,如插入、删除、查找等。带头结点的单链表比起不带头结点的单链表,其优点在于可以减少对链表首元节点的特判,使代码变得更加简洁和易于维护。
以下是带头结点单链表的一些基本操作:
1. 初始化链表:
```c
void initList(Node **head) {
*head = (Node *)malloc(sizeof(Node));
(*head)->next = NULL;
}
```
2. 在链表头插入一个节点:
```c
void insertHead(Node **head, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = (*head)->next;
(*head)->next = newNode;
}
```
3. 在链表尾插入一个节点:
```c
void insertTail(Node **head, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
Node *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
```
4. 在链表中删除一个节点:
```c
void deleteNode(Node **head, int data) {
Node *p = (*head)->next;
Node *pre = *head;
while (p != NULL) {
if (p->data == data) {
pre->next = p->next;
free(p);
return;
}
pre = p;
p = p->next;
}
}
```
5. 查找链表中是否存在某个节点:
```c
bool searchNode(Node *head, int data) {
Node *p = head->next;
while (p != NULL) {
if (p->data == data) {
return true;
}
p = p->next;
}
return false;
}
```
阅读全文