TayTay的学习笔记 2024-03-01 22:49 采纳率: 88.9%
浏览 3
已结题

算法竞赛题,数据结构链表

img

这是答案代码,下面这两句看不懂!求指点!

#include<cstdio>
#include<cstring>
const int maxn = 100000 + 5;
int last, cur, next[maxn];
char s[maxn];

int main() {
  while(scanf("%s", s+1) == 1) {
    int n = strlen(s+1);
    last = cur = 0;
    next[0] = 0;

    for(int i = 1; i <= n; i++) {
      char ch = s[i];
      if(ch == '[') cur = 0;
      else if(ch == ']') cur = last;
      else {
        next[i] = next[cur];//
        next[cur] = i;//这两句到底什么意思啊,看不明白!!
        if(cur == last) last = i;
        cur = i; 
      }
    }
    for(int i = next[0]; i != 0; i = next[i])
      printf("%c", s[i]);
    printf("\n");
  }
  return 0;
}
  • 写回答

4条回答 默认 最新

  • GISer Liu 2024-03-01 22:51
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据你提供的代码,我来解释一下这两句你看不懂的部分:
    cppCopy code

    next[i] = next[cur];
    next[cur] = i;
    

    这两句代码是用来维护一个链表的。在这段代码中,next[] 数组被用来表示链表,其中 next[i] 表示节点 ``` i

    的下一个节点在数组中的索引位置。 在循环遍历字符串 s 的过程中,当遇到一个字符 ch 不是 '[' ']' ```
    时,说明它是一个普通字符,需要将其插入到链表中。这时就需要用到这两句代码。

    1. next[i] = next[cur]; 这句代码的作用是将当前节点 i 的下一个节点指向与当前节点 cur 相同的下一个节点,也就是将 i 插入到 cur 后面。
    2. next[cur] = i; 这句代码的作用是将当前节点 cur 的下一个节点指向 i,也就是将 cur 的下一个节点更新为 i,相当于完成了插入操作。
      通过这两句代码,就能够将字符 ch 插入到链表中,并正确地维护链表的结构。
      如果你还有其他问题或需要进一步解释,请随时提出。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月10日
  • 已采纳回答 3月2日
  • 创建了问题 3月1日

悬赏问题

  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)