我想問你一個建議。我必須創建一個函數,在雙重linked list
中交換兩個項目範圍的位置(不創建新節點)。將項目的範圍移動到雙鏈表中? [C]
,如:
ABCDEFG
'B', 'C' 互換 'E', 'F'
這樣:
AEFDBCG
我在想什麼做的,是改變 -
指針prec
(上一個)的'B'
=
指針prec
'E'
和指針succ
(下一個)'C'
=
指針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;
更新:
繼阿克塞爾的建議,我做了這樣的事情。現在我只需交換一個項目,之後我將迭代此函數。 我無法設法使調試器工作,但我試圖解決這個問題。
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;
}
製作兩張圖紙,一張在交換之前,另一張在交換之後。突出顯示需要改變的指針(有多少?)。然後將圖紙帶到您的終端並輸入代碼。之後:照顧角落案件(當一個或兩個交換片段都在列表的末尾)時,如果片段接觸或重疊,Als會決定你想要發生什麼。 – joop 2015-02-06 13:40:59
使用調試器,並逐步執行您的功能並檢查變量的中間值。 – 2015-02-06 13:46:33
嗯,如果你沒有顯示任何代碼,很難猜出錯誤在哪裏......常見的一種:如果你在擦除之前沒有保存'B'的指針prec(前)它與'指針prec'E''它會丟失,當你嘗試使用它來設置'指針prec'E'' – 2015-02-06 14:27:53