剑指--第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;
}
}
多思考,多尝试。