队尾幸运编号

题目描述:

N个人排成一队,从1到5轮流报数,报5的人是幸运者,出列。报到队尾后,从队首接着报,依次循环。

输入N,输出队尾的人是第几名幸运者?

例如:

N=1,输出1

N=2,输出2

N=5,输出1

N=8,输出3

今天帮同学做这题,死活是想不出来,然而等笔试时间过了后,发现这nm这么明显的循环链表,当时楞是想不出来。

大体思路:

建立data从1->N,N长度的循环链表,(幸运者的名数)result=0;遍历链表,每5次就删除第五的结点,若此时第五结点为队尾元素,输出,否则result++;

class Node{
     int data;
     Node next;
     public Node(int data) {
         this.data=data;
     }
 }
public class Main {

    public static int selution(int N) {
        int result = 0;
        //循环链表创建
        Node head = new Node(1);
        Node temp = head;
        for(int i = 2;i <= N;i++) {
            temp.next = new Node(i);
            temp = temp.next;
        }
        //temp 初值指向队尾的元素
        temp.next = head;
        while(true) {
            for(int i=0;i < 4;i++) {//为了易于删除,只遍历到第四个元素即可
                temp = temp.next;
            }
            if(temp.next.data != N) {//判断第五个元素是否为队尾元素
                temp.next=temp.next.next;
                result++;
            }else {
                return ++result;
            }
        }
    }
}
发布了38 篇原创文章 · 获赞 4 · 访问量 2155

猜你喜欢

转载自blog.csdn.net/gw_9527/article/details/100675521