UVA-11988 Broken Keyboard (模拟,字符串,单向链表(指针实现、数组实现))

博客介绍了如何解决UVA-11988问题,强调了链表在处理此类问题中的优势,并提供了单向链表(指针和数组实现)的解题思路及代码示例。
摘要由CSDN通过智能技术生成

Ps.很好的一道对链表的练习题,第一次练习使用链表,也是发现了自己对链表实现很多不清晰的理解(一片WA声) b( ̄▽ ̄)d

题目:UVA-11988

题目描述:每个样例是一行无空格的字符串,模拟在电脑上打字,’[’ 代表光标移至开头,之后的字符串整体打印在开头,‘]’ 代表光标移至末尾,之后的字符正常在末尾打印。要求输出打印出来的字符

样例输入:This_is_a_[Beiju]_text
     [[]][][]Happy_Birthday_to_Tsinghua_University

样例输出:BeijuThis_is_a__text
     Happy_Birthday_to_Tsinghua_University

分析:
  首先这题用单纯数组存储来实现是肯定不行的,数组的插入需要把后面所有元素后移一位,会TLE,而链表就可以很灵活地插入了。
  一开始理解错了题意,用了双向的链表,左右两边延伸,导致样例输入的“This_is_a_[Beiju]_text"的输出变成了“ujieBThis_is_a__text”。这里 ‘[’ 的意思应该是将从 ‘[’ 之后到下一个 ‘[ ’ 或 ‘]’ 之前的所有字符原顺序打印在开头,所有应该是单向链表的插入操作,把 '[’ 之后的字符挨个插入到head节点后面。

首先是用指针实现链表(一堆注释,给自己理解):

#include<iostream>
#include<string>
#include<cstdio>
#include<sstream>
using namespace std;
struct node 
{
   
	char ch;
	node *next;
};
int main()
{
   
	node *head, *tail, *p;  //head 头节点,tail指向尾部(用于返回末尾)
	string str;             //指针p代表光标位置,每下一个字符都放在p节点(光标)之后   
	while (cin >> str)      //读取一行
	{
   	
		p = tail = head = new(node);   //统一初始化,头节点并不用于存放元素
		p->next = NULL;
		stringstream ss
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值