环路检测,倒数第K个节点、整数反转-leetcode学习

    科技2023-10-04  77

    给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。

    public Node detectCycle(Node head){ Set<Node> set = new HashSet<>(); Node fast = head; while (fast!=null){ if (set.contains(fast)){ return fast; }else { set.add(fast); fast=fast.next; } } return null; }

    将每一个节点遍历放在set中,当包含某个节点时,说明在这个节点重合(环的入口);自学中。 输入一个链表,输出该链表中倒数第k个节点

    public Node theK(Node head, int k) { if (k < 0) { return null; } Node fast = head; Node slow = head; for (int i = 0;i<k;i++){ fast = fast.next; } while (fast!=null){ fast=fast.next; slow=slow.next; } return slow; }

    运用快慢指针,先让快指针先走K步,然后两个指针一起走,当快指针到尾时,慢指针就在倒数第K个节点上,返回慢节点就是了

    整数反转

    8763%10=3; /10=876876%10=6;/10=8787%10=7;/10=88%10=8 public int reverse(int x) { int res = 0; while(x!=0) { int tmp = x%10; if (res>214748364 || (res==214748364 && tmp>7)) { return 0; } if (res<-214748364 || (res==-214748364 && tmp<-8)) { return 0; } res = res*10 + tmp; x /= 10; } return res; }
    Processed: 0.012, SQL: 8