给一个头结点head,判断链表中是否有环,用C++写
时间: 2023-05-25 21:07:13 浏览: 60
```c
#include <stdbool.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
bool hasCycle(ListNode *head) {
if (head == NULL || head->next == NULL) {
return false;
}
ListNode *slow = head;
ListNode *fast = head->next;
while (slow != fast) {
if (fast == NULL || fast->next == NULL) {
return false;
}
slow = slow->next;
fast = fast->next->next;
}
return true;
}
```
注:快慢指针法。从头节点开始,慢指针一次走一步,快指针一次走两步,如果有环,快指针最终一定会追上慢指针。如果没有环,快指针会走到链表末尾,终止循环返回 false。
相关问题
写一个带头结点单链表判断为空链表的C++语言
以下是一个带头结点单链表判断为空链表的 C 语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
int isEmpty(struct Node* head) {
if (head->next == NULL) {
return 1;
} else {
return 0;
}
}
int main() {
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
head->next = NULL;
if (isEmpty(head)) {
printf("链表为空\n");
} else {
printf("链表不为空\n");
}
return 0;
}
```
上述代码中,我们定义了一个带头结点的单链表节点结构体 `Node`,其中 `data` 存储节点数据,`next` 存储指向下一个节点的指针。
`isEmpty` 函数用于判断链表是否为空,参数为链表头指针 `head`。如果头结点的下一个指针为 `NULL`,则认为链表为空,返回 1;否则返回 0。
在 `main` 函数中,我们先创建一个头结点并初始化,然后调用 `isEmpty` 函数判断链表是否为空。如果为空,输出“链表为空”;否则输出“链表不为空”。
注意,这里的链表为空指的是除头结点外没有其他节点,因此头结点的存在并不影响判断。
写一个不带头结点单链表判断为空链表的C++语言
以下是一个简单的不带头结点的单链表结构体定义:
```c
struct Node {
int data;
struct Node* next;
};
```
判断一个不带头结点的单链表是否为空链表,需要判断链表的头指针是否为空。如果链表的头指针为空,那么这个链表就是空链表。以下是判断空链表的代码实现:
```c
struct Node* head = NULL; // 初始化为空链表
if (head == NULL) {
printf("这是一个空链表。\n");
} else {
printf("这不是一个空链表。\n");
}
```
在这个例子中,我们先初始化一个不带头结点的单链表的头指针 `head` 为空指针。然后通过判断 `head` 是否为 `NULL`,来判断链表是否为空链表。如果 `head` 为空指针,那么就说明这个链表是空链表。