本文目錄一覽:
c語言怎麼交換鏈表節點的值
int temp = ptr1-data;
ptr1-data = ptr2-data;
ptr2-data = temp;
只交換值得話就和普通交換就行了;
求教c語言大神 如何交換單向鏈表的節點
交換鏈表結點,實質通常是交換結點結構體中除next指針以外的內容。傳統、正宗和時效較高的方法是交換結點的關係指針而不交換其他成員。一個結點有自己的指針和指向下一個結點的指針,「自己的指針」就是上一結點的next指針,所以要交換上一結點的next指針和本級的next指針兩個指針;而且由於頭結點、尾結點的關係指針與中間結點的有所不同,所以遇到與頭結點和尾結點交換時處理上與中間結點略有差異。所以操作起來比較麻煩,關係處理不好就會出錯。另一個辦法是對應交換除next指針以外的所有成員,思路很清晰,就是代碼較長,在結點成員較多時更為明顯,書寫就比較煩瑣。有一個既保證思路清晰又書寫方便的辦法是「整體交換需要交換的兩個結點,再把next指針交換回來」。我時常用這種辦法。但別看代碼讀起來順順噹噹,也短淺,可別指望這能提高時效——因為交換結構體變數時,儘管書寫很簡短,其實還是一個成員對一個成員地進行交換的,何況還多了個「把next指針交換回來」的操作。屬個人體會,供參考。
C語言問題:怎樣實現對鏈表中兩個結點的交換
有2方法:
第一,找到要交換的2個結點,將2個結點內的數據交換就完成2個結點交換.
因為2個結點不同就是2個結點內數據有區別.
第二,拿掉2個結點,並保持鏈表完好,再將2結點前後倒置,插到原位置.
當然,如果是雙向鏈表要麻煩些,但思路是一致的.
C++鏈表如何實現節點交換
c++鏈表實現節點轉換有兩種方法:
1)結點交換時機上可以看成是節點裡的值交換;
2)直接把節點的地址next的指向改變。
例如:交換LnodeA和LnodeB
用while找到節點的前一個節點pA-next = LnodeA,pB-next = LndoeB
然後pTemp = LnodeA-next;
pB-next = LnodeA;
LndoeA -next = LnoedeB-next;
pA-next = LndoeA;
LnodeA-next = pTemp;
C語言鏈表的節點內容互換問題
#include stdio.h
#include string.h
#include stdlib.h
typedef struct student {
char name[20];
int score;
struct student *next;
}STU,*List;
const List createList() {
List head,p;
char name[20];
int score;
head = p = (List)malloc(sizeof(STU));
printf(“姓名 成績:\n”);
while(scanf(“%s%d”,name,score) == 2) {;
p-next = (List)malloc(sizeof(STU));
p = p-next;
strcpy(p-name,name);
p-score = score;
printf(“姓名 成績(Ctrl+Z to quit):\n”);
}
p-next = NULL;
return head;
}
/*輸出學生成績單*/
void print(List head) {
List p = head-next;
while(p) {
printf(“%s\t%d\n”,p-name,p-score);
p = p -next;
}
printf(“\n”);
}
/*學生成績排序*/
void sort(List head) {
List p,q,pt,qt;
for(p = head; p-next; p = p-next) {
qt = p;
q = p-next;
while(q-next) {
if(p-next-score q-next-score)
qt = q;
q = q-next;
}
if(p != qt) {
pt = p-next;
p-next = qt-next;
qt-next = p-next-next;
p-next-next = pt;
}
}
}
int main() {
List head = createList();
printf(“排序前:\n”);
print(head);
sort(head);
printf(“排序後:\n”);
print(head);
return 0;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/155127.html