剑指--第62题 圆圈中最后剩下的数字

第62题 圆圈中最后剩下的数字

题目 0,1,,....,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
思路 创建环形链表,自己定义了一个链表节点类;
自己写的low代码

// 环形链表;
public class Solution {
    public int LastRemaining_Solution(int n, int m) {
        if (n == 0 || m == 0) {
            return -1;
        }
        // 构造环形链表;
        ListNode p = new ListNode(0);
        ListNode q = p;
        for (int i = 1; i < n; i++) {
            ListNode temp = new ListNode(i);
            q.next = temp;
            q = q.next;
        }
        q.next = p;

        // 开始报数(删节点);
        // 同时需要p和q,p表示待删的
        while (q.next != q) { //注意出口条件,不是q.next!=null;
            int j = 0;
            while (j < m) {
                if (j == m - 1) {
                    q.next=p.next;
                    p= q.next;
                } else {
                    q = p;
                    p = p.next;
                    
                }
                j++;
            }
        }
        return q.val;  //此时p和q指向同一个;
    }
}
class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}

猜你喜欢

转载自www.cnblogs.com/LynnMin/p/9293238.html