在结点A和结点B插入结点 X的操作序列为

  1. 设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B插入结点
    X的操作序列为( B )。
    (A) s->next=p->next;p->next=-s;
    (B) q->next=s; s->next=p;
    (C) p->next=s->next;s->next=p;
    (D) p->next=s;s->next=q;
    写成s->next = q->next ; q->next = s;可以吗

也可以
q->next就是p,所以
s->next = q->next ; q->next = s 就是
s->next = p ; q->next = s
和选项B一样

chatgpt:
不可以。写成s->next = q->next; q->next = s; 的话,会将结点A的后继结点B的后继指针改为指向结点X的后继结点,而不是将结点X插入到结点A和结点B之间。

正确的操作序列应该是 (B),即将结点X的指针指向结点B,然后将结点A的指针指向结点X,这样就能将结点X插入到结点A和结点B之间了。

因此,正确的代码应该是:

s->next = p; // 将结点X的指针指向结点B
q->next = s; // 将结点A的指针指向结点X,将结点X插入到结点A和结点B之间

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/1099071
  • 除此之外, 这篇博客: 每日一题--20200408--约瑟夫环问题:已知n个人围成一圈(编号:1,2,3,…,n),从编号为1的人开始报数,报数为m的那个人出列;从他的下一个人又从1开始数,同样报数为m的人出列;依此循环下中的 已知n个人围成一圈(编号:1,2,3,…,n),从编号为1的人开始报数,报数为m的那个人出列;从他的下一个人又从1开始数,同样报数为m的人出列;依此循环下去,直到剩余一个人。求最后这一个人在最开始的序列中编号是几号? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include <stdio.h>
    int main ( )
    {
    	//1
        int n,m,out = 0,count = 0;
        printf("n = ");
        scanf("%d",&n);
        printf("m = ");
        scanf("%d",&m);
        //2
        int a[n] ;
        for (int j = 0; j < n; j++) a[j] = 1 + j;
        int i = 0 ;
        while(out != n -1)
        {
            if (a[i] != 0) {
                count++;
            }
            if (count == m) {
                count = 0;
                a[i] = 0;
                out++;
            }
            i++;
            if (i == n) {
                i = 0;
            }
            
        }
        for (int i = 0; i < n; i++) {
            if (a[i] != 0) {
                printf("%d",a[i]);
            }
        }
    }
    

    思路:
    其实计算机的思维很简单,只需要用最简单的描述就可以做到解决看起来很难的数学题,只要掌握题目的规律,找最简单的循环体就可以,就像数学归纳法不也是很万能的解题方式吗?

    1. 首先–>接受变量
    2. 声明一个数组来存序号(计算机的思维,零与非零)
    3. 元素就是序号,当这个被挤出去了后序号变为零,看最终剩下的最后一个元素
    4. 后面遇到零的时候就不数它
    5. 一共有n个元素,最后只剩一个
    6. 数的时候注意,因为是一个圈存的数据,数组就像是位置,位置不可以变多,绕了一圈以后要归零
    7. 最终剩下的数组元素就是我们要的序号

    不要去想着一开始的序号要存起来,出去的人连带位置一同出去,那样很麻烦


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^