leetcode刷题19天
141. Linked List Cycle
Given a linked list, determine if it has a cycle in it.
To represent a cycle in the given linked list, we use an integer pos which represents the position (0-indexed) in the linked list where tail connects to. If pos is -1, then there is no cycle in the linked list.
Example 1:
Input: head = [3,2,0,-4], pos = 1
Output: true
Explanation: There is a cycle in the linked list, where tail connects to the second node.
Example 2:
Input: head = [1,2], pos = 0
Output: true
Explanation: There is a cycle in the linked list, where tail connects to the first node.
Example 3:
Input: head = [1], pos = -1
Output: false
Explanation: There is no cycle in the linked list.
Follow up:
Can you solve it using O(1) (i.e. constant) memory?
代码:
public class Solution {
public boolean hasCycle(ListNode head) {
if(head==null || head.next==null)
return false;
if(head.next==head)
return true;
ListNode p1 = head;
ListNode p2 = head.next.next;
//int count=0;
while(p1!=null&&p2!=null) {
if(p1==p2)
{
return true;
}
if(p1.next!=null)
p1 = p1.next;
else
break;
if(p2.next!=null&&p2.next.next!=null)
p2 = p2.next.next;
else
break;
//count++;
}
return false;
}
}
- Min Stack
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
push(x) – Push element x onto stack.
pop() – Removes the element on top of the stack.
top() – Get the top element.
getMin() – Retrieve the minimum element in the stack.
Example:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> Returns -3.
minStack.pop();
minStack.top(); --> Returns 0.
minStack.getMin(); --> Returns -2.
代码:
import java.util.Stack;
class MinStack {
Stack<int[]> stack;
/** initialize your data structure here. */
public MinStack() {
this.stack = new Stack<int[]>();
}
public void push(int x) {
int[] nums;
if(this.stack.isEmpty()) {
this.stack.push(new int[]{x, x});
}
else {
if(x<this.stack.peek()[1])
this.stack.push(new int[]{x, x});
else
this.stack.push(new int[]{x, this.stack.peek()[1]});
}
}
public void pop() {
this.stack.pop();
}
public int top() {
return this.stack.peek()[0];
}
public int getMin() {
return this.stack.peek()[1];
}
}