面试遇到的没写出来....后来发现超简单,当时数据结构课玩手机了╭(╯^╰)╮
题目:100名学生围成一个圈, 编号从1到100,从第一名学生开始报数,从1-9报数 每报出9就退出,直到所有学生退出, 问各个学生出圈顺序
采用循环单链表解决,代码如下:
class Program
{
static void Main(string[] args)
{
ListNode listNode = ListNodeInit(100);
ysfh(listNode);
Console.Read();
}
private static void ysfh(ListNode headNode)
{
while (headNode != null && headNode.next != headNode)
{
ListNode temp = null;
for (int i = 0; i < 9; i++)
{
if (temp == null)
{
temp = headNode;
}
else
{
temp = temp.next;
}
}
Console.WriteLine(temp.value + "出局");
headNode = temp;
headNode.value = headNode.next.value;
headNode.next = headNode.next.next;
}
}
/// <summary>
/// 循环单链表初始化
/// </summary>
/// <param name="listNodeLength">链表长度</param>
/// <returns></returns>
public static ListNode ListNodeInit(int listNodeLength)
{
ListNode listNode = new ListNode(0);
ListNode copyListNode = listNode;
for (int i = 1; i < listNodeLength; i++)
{
ListNode lnTemp = new ListNode(i);
listNode.next = lnTemp;
listNode = lnTemp;
}
listNode.next = copyListNode;
return copyListNode;
}
}
public class ListNode
{
public int value;
public ListNode next;
public ListNode(int _value)
{
value = _value;
}
}