鏈表交換相鄰元素 C語言問題:怎樣實(shí)現(xiàn)對(duì)鏈表中兩個(gè)結(jié)點(diǎn)的交換?
C語言問題:怎樣實(shí)現(xiàn)對(duì)鏈表中兩個(gè)結(jié)點(diǎn)的交換?鏈表交換節(jié)點(diǎn)有兩種方式:交換節(jié)點(diǎn)內(nèi)容交換節(jié)點(diǎn)位置,如定義如下結(jié)構(gòu),分為數(shù)據(jù)部分和鏈表指針部分structdata{int num float score}s
C語言問題:怎樣實(shí)現(xiàn)對(duì)鏈表中兩個(gè)結(jié)點(diǎn)的交換?
鏈表交換節(jié)點(diǎn)有兩種方式:交換節(jié)點(diǎn)內(nèi)容交換節(jié)點(diǎn)位置,如定義如下結(jié)構(gòu),分為數(shù)據(jù)部分和鏈表指針部分structdata{int num float score}struct stu{structdata struct stu*next}*head,*P1,*P2,*P3,*p4head->p1->p2->p3->p4交換節(jié)點(diǎn)的內(nèi)容。節(jié)點(diǎn)的順序保持不變。交換兩個(gè)節(jié)點(diǎn)時(shí),只交換數(shù)據(jù)部分,下一個(gè)指針不移動(dòng)。例如,交換P1和P3(data)的內(nèi)容:structudata t=P1->datap1->data=P3->datap3->data=t//這是可以的。為了保持鏈表的正常連接,需要重置next的值。這個(gè)過程有點(diǎn)復(fù)雜,例如:交換P1和P3的位置:最后更改為:head->p3->p2->p1->p4。首先,找到P1的頭和P3的P2,然后開始重新分配鏈表的排列:1。(head)的新繼承節(jié)點(diǎn)P1的頭應(yīng)成為P3(P4)3的原繼承節(jié)點(diǎn),P3(P2)的新繼承節(jié)點(diǎn)應(yīng)成為p14、P3的新繼承節(jié)點(diǎn),P1(P2)結(jié)構(gòu)的原繼承節(jié)點(diǎn)stu*p1p,*P3P,*pfor(P=headp!=nullp=P->next){如果(P->next==P1)p1p=P//找到P1的前向頭如果(P->next==P3)P3P=P//找到P3的前體}p1p->next=P3//P3的前體節(jié)點(diǎn)的新后繼節(jié)點(diǎn)成為P3的前體節(jié)點(diǎn)head->p3 struct stu*tnext=P1->next//保存P1(P2)的前體節(jié)點(diǎn)p1->next=P3->next//p1的新后繼節(jié)點(diǎn)成為P3(P4)p1->p4p3p->next=p1//P3的前導(dǎo)節(jié)點(diǎn)新后繼節(jié)點(diǎn)成為p1p2->p1p3->next=tnext//P3,新后繼節(jié)點(diǎn)成為p1的原始后繼節(jié)點(diǎn)P3->p2