带头结点单链表的判空代码
时间: 2023-07-10 18:31:54 浏览: 54
带头结点单链表的判空代码如下:
```c
typedef struct node {
int data;
struct node* next;
} Node;
typedef struct {
Node* head;
int length;
} List;
int isEmpty(List* list) {
if (list == NULL || list->head == NULL) {
return 1;
}
return 0;
}
```
其中,List为带头结点单链表的结构体,包含头结点指针head和链表长度length。isEmpty函数用于判断链表是否为空,若链表为空或链表头指针为空,则返回1,否则返回0。
相关问题
带头结点单链表的创建代码
带头结点的单链表创建代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node* next; // 指针域
} Node;
// 创建带头结点的单链表
Node* createLinkedList() {
// 创建头结点
Node* head = (Node*)malloc(sizeof(Node));
head->next = NULL;
// 尾指针,指向链表最后一个节点
Node* tail = head;
// 输入节点数据,以-1作为结束标志
int data;
printf("请输入节点数据(以-1结束):");
scanf("%d", &data);
while (data != -1) {
// 创建新节点
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
// 将新节点插入到链表尾部
tail->next = newNode;
tail = newNode;
// 输入下一个节点数据
printf("请输入节点数据(以-1结束):");
scanf("%d", &data);
}
return head;
}
// 打印链表
void printLinkedList(Node* head) {
Node* p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
// 创建带头结点的单链表
Node* head = createLinkedList();
// 打印链表
printf("链表的数据为:");
printLinkedList(head);
return 0;
}
```
将输入的带头结点单链表倒置代码
以下是将带头结点的单链表倒置的代码:
```C++
void reverseList(Node* head) {
if (head == nullptr || head->next == nullptr) {
return; // 链表为空或只有一个节点,直接返回
}
Node* prev = nullptr;
Node* curr = head->next;
while (curr != nullptr) {
Node* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head->next = prev;
}
```
其中,`Node` 是单链表节点的结构体,包含一个 `int` 类型的数据成员 `data` 和一个指向下一个节点的指针 `next`。`head` 是指向链表头结点的指针,即 `head->next` 指向链表的第一个节点。在代码中,我们使用三个指针 `prev`、`curr` 和 `next`,分别表示当前节点的前驱、当前节点和当前节点的后继。在遍历链表的过程中,我们每次将当前节点的 `next` 指针指向它的前驱,然后将 `prev`、`curr`、`next` 分别向后移动一个节点,直到遍历完整个链表。最后,将头结点的 `next` 指针指向反转后的链表的第一个节点。