已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列,问最后一个出环的人的原编号。
用在单链表中删除一个结点的思想来解决此题
设一个没有头结点指针的单链表。一个指针指向此单链表中间的一个结点(不是第一个,也不是最后一个结点),将该结点从单链表中删除,要求时间复杂度O(1)。
图示分析:
程序清单:
#include <iostream>
#include <malloc.h>
using namespace std;
typedef struct NODE
{
int data;
struct NODE *next;
}Node, *LinkList;
void CreatByTail(LinkList L)
{
Node *p, *tail;
tail = L;
int i = 0;
while (i < 7)
{
p = (Node*