算法练习之环形链表详解编程语言

1.环形链表

给定一个链表,判断链表中是否有环。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

示例 1: 
输入:head = [3,2,0,-4], pos = 1 
输出:true 
解释:链表中有一个环,其尾部连接到第二个节点。

算法练习之环形链表详解编程语言

示例 2: 
输入:head = [1,2], pos = 0 
输出:true 
解释:链表中有一个环,其尾部连接到第一个节点。

算法练习之环形链表详解编程语言

示例 3: 
输入:head = [1], pos = -1 
输出:false 
解释:链表中没有环。

算法练习之环形链表详解编程语言 

使用快慢指针,若指针相遇则判断有环

java

/** 
 * Definition for singly-linked list. 
 * class ListNode { 
 *     int val; 
 *     ListNode next; 
 *     ListNode(int x) { 
 *         val = x; 
 *         next = null; 
 *     } 
 * } 
 */ 
public class Solution { 
    public boolean hasCycle(ListNode head) { 
        if(head==null||head.next==null) return false; 
        ListNode fast = head.next,slow = head; 
        while(fast!=slow){ 
            if(fast==null||fast.next==null) return false; 
            fast = fast.next.next; 
            slow = slow.next; 
        } 
        return true; 
    } 
}

 2.最小栈

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

push(x) — 将元素 x 推入栈中。
pop() — 删除栈顶的元素。
top() — 获取栈顶元素。
getMin() — 检索栈中的最小元素。

每次入栈2个元素,一个是入栈的元素本身,一个是当前栈元素的最小值

java

class MinStack { 
 
    private int min = Integer.MAX_VALUE; 
    private Stack<Integer> stack; 
    public MinStack() { 
        stack = new Stack<>(); 
    } 
 
    public void push(int x) { 
        if(min>=x){ 
            stack.push(min); 
            min = x; 
        } 
        stack.push(x); 
    } 
 
    public void pop() { 
        if(stack.pop()==min){ 
            min = stack.pop(); 
        } 
    } 
 
    public int top() { 
        return stack.peek(); 
    } 
 
    public int getMin() { 
        return min; 
    } 
}

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/20352.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论