破损的键盘(模拟链表)

题目:

你在输入文章的时候,键盘上的Home键和End键出了问题,会不定时的按下。

给你一段按键的文本,其中'['表示Home键,']'表示End键,输出这段#include<iostream>

#include<string.h>
#include<cstdio>
#include<algorithm>
using namespace std;
int next[1000],cur=0,last;
int main()
{
    
    /*模拟链表
    有点难以理解
    */
    
    char s[1000];
    scanf("%s",s+1);
    for(int i=1; i<=strlen(s+1); i++)
    {
        if(s[i]=='[')
            cur=0;
        else if(s[i]==']')
            cur=last;
        else
        {
            next[i]=next[cur];  
            next[cur]=i;
            /* 这两句是重点
i 为新节点 cur 可视为浮标节点 next[i] 为新节点的 下一节点的“指针”(并不是下一节点的指针,而是i节点中保存的下一节点的指针,下方同理); next[cur] 为浮标节点的下一节点的“指针” 那么就是让新节点的“下一个节点的指针”指向浮标指针的指向的节点 然后浮标节点的“下一节点的“指针“” 指向 i 节点
由此,完成新节点的插入 此时i 节点在浮标节点后 ,因此利用下方的 cur =i; 使新节点变成浮标节点
顺序不能反,结合说明看图理解
*/ if(last == cur ) last =i;//如果浮标节点是尾节点,那么更新尾节点;
        }
    }
    for(int i=next[0]; i!=0; i=next[i])//依次访问节点
        printf("%c",s[i]);



}

 

核心就是 next[i]=next[cur]相当于指针创建中的 p->next=*L->next;(一个是让next[i]=0,一个是让p->next=NULL) next[cur]=i 相当于指针创建中的 *L->next=p;(一个让cur->i 一个让L的next->p)(这段来源于 http://www.cnblogs.com/GeniusYang/p/5176454.html

转载于:https://www.cnblogs.com/tttfu/p/10207503.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值