2、C++基础:循环链表

作者: blueskylxb | 来源:发表于2016-11-16 15:22 被阅读20次

耶稣有13个门徒, 其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号

#include <iostream>

using namespace std;

typedef struct Node{
  int data;
  struct Node *next;
} node;

int main(void){
  node *head = new node;
  head->next = head;
  node *p = head;
  p->data = 1;

  int i;
  for(i=12; i>0; i--){
    node *p = new node;
    p->data=i+1;
    p->next = head->next;
    head->next = p;
  }

  int count = 0;
    node *q, *pq=NULL;
    p = head;

    cout << p->data << endl;

    while(1){
        count++;
        q = p;
        p = p->next;

        cout << p->data << endl;

        if(count==2){
          if(pq == p){  // 最后只有两个节点的时候,p循环至pq的位置,故删除p,留下p->next

            cout << "delete:" << p->data << endl;

            cout << p->next->data << endl;
            return 0;
          }

          cout << "delete:" << p->data << endl;

          q->next = p->next;
          delete[] p;

          count = 0;
          pq = p = q->next;

          cout << p->data << endl;

        }

    }

    return 0;

}

参考:http://blog.chinaunix.net/uid-24219701-id-1993931.html

相关文章

  • 2、C++基础:循环链表

    耶稣有13个门徒, 其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2...

  • C++实现双向循环链表

    本次博文是关于利用C++模板的方式实现的双向循环链表以及双向循环链表的基本操作,在之前的博文C++语言实现双向链表...

  • 数据结构与算法——线性表3

    线性表——单向循环链表 3、单向循环链表 在单向链表的基础上,单向链表的尾结点的Next指向链表的头部,就是为循环...

  • 02单项循环链表

    [toc] 循环链表 循环链表 就是在单链表的基础上修改而来 单链表是将尾结点的指针指向NULL,循环链表是将尾结...

  • 2018-07-31------数据结构

    1、单链表 传送1 传送门2 2、双链表 传送门 3、循环链表 单循环链表 双向循环链表 4、静态链表 传送门 5...

  • 0x05双向循环链表

    1 双向循环链表创建 2 双向循环链表插入元素 3 遍历双向循环链表 4双向循环链表删除结点

  • 10.单向循环链表SingleCycleLinkList

    目录:1.单向循环链表的定义2.单向循环链表的图解3.单向循环链表定义操作4.单向循环链表的实现 1.单向循环链表...

  • 链表-链表的建立以及增删操作

    1.单链表 2.单向循环链表 3.双链表

  • C语言——第五次笔记

    学生管理系统1.明确功能2.数据存储3.准备知识3.1 枚举3.2 链表 (单链表,循环链表,双向链表,双向循环链...

  • 线性表 - 循环链表

    1.引子 2.循环链表的使用 3.将两个单链表合并成一个循环链表

网友评论

    本文标题:2、C++基础:循环链表

    本文链接:https://www.haomeiwen.com/subject/rmdrpttx.html