gpt4 book ai didi

c - 移动双链表中的项目范围? [C]

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:03 26 4
gpt4 key购买 nike

我想问你一个建议。我必须创建一个函数来交换双 链表 中两个项目范围(不创建新节点)的位置。

喜欢:

ABCDEFG

'B','C'换成'E','F'

所以:

AEFDBCG

我想做的是改变-

'B' 的指针 prec (previous) = 指针 prec 'E''C' 的指针 succ (next) = ' 的指针 succ F'.

最后是指针prec 'E' = 指针prec 'B'succ 指针 'F' = 指针 succ 'C'

我已经尝试应用我所说的但我认为我在代码上犯了很多错误。

另一种方法是创建一个函数,该函数接受单个项目并将节点移动到所需位置。

有人可以帮我创建一个做类似事情的函数吗?我的脑袋出现了段错误:P

结构是这样的:

struct nodo {
char info;
struct nodo *succ;
struct nodo *prec;
};
typedef struct nodo nodo;

更新:

根据 Axel 的建议,我做了这样的事情。现在我只是交换一个项目,然后我将迭代这个函数。我无法使调试器正常工作,但我正在尝试解决问题。

nodo *ScambiaSottoliste(nodo *lista,int i,int j){ //I first position, J second position

nodo *firstRange1, *range1, *metaInf, *metaSup, *range2, *last;

range1=RicercaPosizione(lista, i); //Reserch position I
firstRange1=range1->prec;
metaInf=range1->succ;
range2=RicercaPosizione(lista, j); //research position J
metaSup=range2->prec;
last=range2->succ;

range1->prec=metaSup;
range1->succ=last;
range2->prec=firstRange1;
range2->succ=metaInf;

return lista;
}

最佳答案

您可以遍历列表并将其分成五个(可能为空)子列表:

  1. 在第一个范围之前列出
  2. 第一范围
  3. 在第一个范围之后和第二个范围之前列出
  4. 第二范围
  5. 在第二个范围之后列出

在此拆分期间,您可以检测重叠和给定范围的顺序。整数类型的状态变量有助于跟踪您在迭代期间追加的子列表。

一旦您有了子列表,您就可以按照所需的顺序将它们连接在一起。最后,不要忘记维护您的列表开始和结束变量。

关于c - 移动双链表中的项目范围? [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28366965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com