链表类问题(循环链表,双向链表)

输入1个数字和多个字符,中间均以空格隔开。假设数字取值为m(范围1~9),后面字符个数为n。假设n个字符围成一圈,从第一个字母开始循环报数,当数
到m以后,第m个字母就出列,直到这n个字母全部出列。最后,按照出列的顺序输出这些字母,中间仍以空格隔开。取值范围:m为1到9, 字符个数n大于1
小于20。
输入:
第一个为数字,后面为多个字符,均以空格隔开

输出:
输出重新排列后的字符,以空格隔开

样例输入:
3 a b c d e f g h i
样例输出:
c f i d h e b g a
答案提示:
建议采用循环链表

单向链表也可以做这个题目。
 1 view plaincopy to clipboardprint?
 2 #include "iostream" 3 #include <iomanip>
 4 #include <string.h>
 5 #include <string>
 6 #include <vector>
 7 #include <cmath>
 8 #include <cctype>
 9 #include <algorithm>
10 #include <set>
11usingnamespace std;
1213 typedef struct node
14{
15char ch;
16     node * pre;
17     node * next;
18}node;
19int n;
20int k;
21 node *first;
22void read()
23{
24     k=0;
25     cin >>n;
26char c;
27     first = NULL;
28     node * p = first;
29     node * q = NULL;
30while(cin >>c)
31    {
32         ++k;
33if(k == 1)
34        {
35             p = new node();
36             p->pre = NULL;
37             p->next = NULL;
38             p->ch = c;
39             first = p;
40        }
41else42        {
43             q = new node();
44             q->ch = c;
45             q->pre = p;
46             q->next = p->next;
47             p->next = q;
48             p = q;
49        }
50    }
51     first->pre = p;   //为了有循环的效果,需要把first节点的pre值置为最后一个节点
52     p->next = first;  //最后一个节点的next值置为first节点。53}
5455void solve()
56{
57     node *p = first;
58while(k--)
59    {
60int t = n-1;
61while(t--)
62        {
63             p = p->next;
64        }
65         node *q = p;
66         cout <<q->ch <<"";
67         (q->pre)->next = q->next;   //节点删除时,需要注意
68         (q->next)->pre = q->pre;  69         p = q->next;
70    }
71}
72int main()
73{
74    read();
75    solve();
76return0;
77 }  
时间: 2024-08-26 01:51:47

链表类问题(循环链表,双向链表)的相关文章

数据结构与算法之PHP实现链表类(单链表/双链表/循环链表)

链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链. 链表分为单链表.双链表.循环链表. 一.单链表 插入:链表中插入一个节点的效率很高.向链表中插入一个节点,需要修改它前面的节点(前驱),使其指向新加入的节点,而新加入的节点则指向原来前驱指向的节点(见下图). 由上图可知,B.C之间插入D,三者之间的关系为 current为插入节点的前驱节点 current->next = new              // B节点指向新节点D new->n

【数据结构】循环链表&amp;&amp;双向链表详解和代码实例

喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 循环链表 1.1 什么是循环链表? 前面介绍了单链表,相信大家还记得相关的概念.其实循环链表跟单链表也没有差别很多,只是在某些细节上的处理方式会稍稍不同. 在此之前,大家可以先思考一个问题:单链表中,要找到其中某个节点只需要从头节点开始遍历链表即可,但是有些时候我们的想法是,能不能从任意节点开始遍历,也能找到我们需要的那个节点呢? 其实啊,这个实现也很简单自然,把整个链表串成一个环问题就迎刃而解了.所以,关于循环链表,

数据结构与算法系列(1)-单链表类的实现(C++)

通过定义一个C++类封装单链表这种数据结构, 封装的方法有: 1.通过输入创建单链表: 2.获取单链表的数据元素个数: 3.打印输出单链表中各个元素: 4.搜索某个元素在单链表中的位置: 5.在某个位置之后插入一个结点: 6.在某个位置删除一个节点: 7.单链表逆置: 8.单链表是否存在回环的判定: 9.单链表的升序排序: 10.两个单链表的升序合并: 11.两个单链表的降序合并. 注:单链表的排序采用的是快速排序的方法. 下面是C++写的程序代码,附运行截图. #include <iostre

1.使用C++封装一个链表类LinkList

 使用C++封装一个链表类LinkList.写出相应一个测试用例 链表需要提供 添加 修改删除 除重 合并 排序创建 销毁等接口. 不能调用库函数或者使用STL等类库 题目延伸***********逆置链表********** LinkNode.h #ifndef LINKNODE_H #define LINKNODE_H #include <iostream> class LinkNode { public: int m_idata; LinkNode* m_pnext; }; #end

爪哇国新游记之十六----泛型单链表类

/** * 单链表节点类 * @param <T> */ class Node<T extends Object>{ protected T value; protected Node next; } /** * 单链表类 * @param <T> */ public class ChainList<T extends Object>{ private Node<T> first; public void addTail(T t){ Node&l

单链表类的定义与实现

///////////////////////////////////////////////////////////////// //日期:2014-11-03 //作者:Davis //功能:单链表的定义与操作实现 ///////////////////////////////////////////////////////////////// #pragma once template<class T> struct Node { T data; //数据域,存放表元素 Node *ne

第13周 【项目 - 链表类】(2)

(2)请在下面已有代码的基础上完善程序,完成动态链表的简单操作,程序运行的截图供参考. class Student //结点类 { public: Student(int n,double s):num(n), score(s), next(NULL) {} ~Student(); Student *next; //指向下一个结点 int num; double score; }; class MyList //链表类,其中的成员是学生 { public: MyList() { head=NUL

链表类的实现及其简单功能

今天C++老师让写了一个链表的类,其中要求弄一个节点类,表示深深的力不从心.晚上无聊的时候重新想了下这个问题,感觉还可以,就敲了下. 先分块介绍下: 节点类 class node//节点类 { public: double data; node *next; }; 链表类: class Link//:链表类 { public: Link()//构造函数 { pfront=NULL; pend=NULL; } double Getx(int n);//找出第n个数字 void add(double

单链表类模板

单链表类模板节点头 ListNode.h 1 #include "stdafx.h" 2 #include<iostream> 3 using namespace std ; 4 template<typename Type> class SingleList; 5 template <typename Type> 6 class ListNode{ 7 private: 8 friend class SingleList<Type>;

双链表类模板

双链表链表节点 ListNode.h 1 #include "stdafx.h" 2 #include <iostream> 3 using namespace std; 4 5 template <typename Type>class DoublyList; 6 template <typename Type> 7 // 节点信息 8 class ListNode{ 9 private: 10 friend class DoublyList<