剑指--第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;
    }
}
posted @ 2018-07-11 20:55  LynnMin  阅读(146)  评论(0编辑  收藏  举报