Java教程

力扣刷题日记(链表)

本文主要是介绍力扣刷题日记(链表),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

链表(LinkedNode)

判断链表是否有环

哈希表:

将访问过的链表节点记录下来,如果该节点之前访问过,则直接返回有环,否则继续遍历
bool hasCycle(ListNode *head) {
	unordered_set<ListNode*> temp;
	while(head != nullptr){
		if(temp.count(head)){
			return true;
		}
		else[
			temp.insert(head);
			head = head -> next;
		]
	}
	return false;
}

Floyd算法:

又称龟兔赛跑算法,用快慢指针遍历整个数组,如果指针碰撞,则说明有环,如果都遍历到了空指针,说明没有环路

代码

bool hasCycle(ListNode* head){
	if (head == nullptr || head->next == nullptr) {
        return false;
    }
	ListNode* slow = head;
	ListNode* fast = head -> next;
	while(slow != fast){
		if(fast == nullptr || fast -> next == nullptr)
			return false;
		slow = slow -> next;
		fast = fast -> next -> next;
	}
	return true;
}
这篇关于力扣刷题日记(链表)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!