Monday, June 16, 2014

Linked List Circle @leetcode

Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
用最常用的办法,快慢节点各一个,一个走两步,一个走一步.如果快的那个先遇到NULL,证明无环,如果快慢节点相遇,证明有环.关键是要在循环里判断是否到尾端.

/**
* 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) return false;
if(head->next == NULL) return false;
ListNode *p_1, *p_2;
p_1 = head;
p_2 = head->next;
while(p_1!=NULL && p_2!= NULL){
if(p_1 == p_2) return true;
p_1 = p_1->next;
p_2 = p_2->next;
if(p_2 == NULL)
return false;
else
p_2 = p_2->next;
}
return false;
}
};

No comments:

Post a Comment

Leetcode 316. Remove Duplicate Letters

 这道题表面问的是如何删除重复,实际在问如何从多个字符选取一个保留,从而让整个字符串按升序排列。那么策略就是对于高顺位的字符比如‘a',就要选靠前位置的保留,而低顺位字符如’z'则应该尽量选取靠后位置保留。 算法大概思路:每看到一个字符,我们要决定是否保留 1. ...