博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode:linked_list_cycle
阅读量:7051 次
发布时间:2019-06-28

本文共 1691 字,大约阅读时间需要 5 分钟。

一、     题目

   给定一个链表。确定它是否有一个环。不使用额外的空间?

二、     分析

    1. 空链表不成环

    2. 一个节点自环

3. 一条链表完整成环

思路:使用两个指针,一个每次往前走2步,一个每次往前走1步。两指针一定会相遇,假设两个指针相遇,即说明链表有环存在。时间复杂度为O(N),空间复杂度为O(1)。

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    bool hasCycle(ListNode *head) {        if(head==NULL||head->next==NULL) return false;        if(head->next==head) return true;        ListNode* node1=head->next;        ListNode* node2=head->next->next;                while(node1!=NULL&&node2!=NULL){        	node2=node2->next;        	if(node2==NULL) break;        	node2=node2->next;        	node1=node1->next;        	if(node1==node2) break;        }        return node1==node2;    }};/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    bool hasCycle(ListNode *head) {        if(head==NULL||head->next==NULL) return false;        ListNode* node=head->next;                while(node!=NULL&&node->next!=NULL){        	//一个每次往前走2步,一个每次往前走1步。两个相遇,			//即链表有环。时间复杂度为O(N)。空间复杂度为O(1)。

if(node==head||node->next==head) return true; node=node->next->next; head=head->next; } return false; } }; /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { struct ListNode* fast = head; struct ListNode* slow = head; while (fast != NULL && fast->next != NULL) { fast = fast->next->next; slow = slow->next; if (fast == slow) return true; } return false; } };

转载地址:http://ikpol.baihongyu.com/

你可能感兴趣的文章
1520-win10
查看>>
thinkjs——moment.js之前后台引入问题
查看>>
Java 线程内异常处理
查看>>
二:vlan,gre,vxlan
查看>>
静态内部类和非静态内部类的区别
查看>>
C语言 · 栅格打印问题
查看>>
【mysql】备份篇2:使用java程序定期备份mysql数据库
查看>>
BZOJ 4514: [Sdoi2016]数字配对 [费用流 数论]
查看>>
mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法
查看>>
Tooltip浮动提示框效果(掌握里面的小知识)
查看>>
getline函数(精华版)
查看>>
myeclipse debug不显示变量值解决的方法
查看>>
Cygwin-Cygwin ssh Connection closed by ::1 出错
查看>>
SpringMVC工作原理
查看>>
【NLP】文本相似度
查看>>
python模拟Get请求保存网易歌曲的url
查看>>
Gson 解析教程
查看>>
曼-惠特尼U检验Mann–Whitney U Test
查看>>
Android 常用动画之RotateAnimation
查看>>
使用 video.js 开发 HTML5 视频页面
查看>>