uj5u.com熱心網友回復:
for example
void Insert(List *L, Node e) { //這里為啥用二級指標?按理用List L就可以了,因為List本身就是指標型別了,是鏈表為空則新建鏈表嗎?
if (*L==NULL) {
*L = (List)malloc(sizeof(Node));
strcpy(*L->ID, e.id);
*L->Score = e.Score;
*L->next = NULL;
return;
}
List p = *L;
while (p->next != NULL) {
p = p->next;
}
p->next = (List)malloc(sizeof(Node));
strcpy(p->next->ID, e.ID);
p->next->Score = e.Score;
p->next->next = NULL;
}
void Swap(List *L, int i, int j) { //這里應該用List L就可以了,不需要二級指標
int cnt = 0;
List p=*List, pi1=p, pi2=NULL, pj1=p, pj2=NULL, tmp;
while (p!=NULL) {
if (cnt==i-1) pi1=p; //i的上一個節點
if (cnt==i) pi2=p;//i節點
if (cnt==j-1) pj1=p; //j的上一個節點
if (cnt==j) pj2=p; //j節點
cnt++;
p = p->next;
}
if (pi2!=NULL && pj2!=NULL && pi2 != pj2) { //如果找到兩個節點,并且兩個節點不同,則交換節點
pi1->next = pj2; //i的上一個節點的next指向j節點
pj1->next = pi2; //j的上一個節點的next指向i節點
tmp = pj2->next;
pj2->next = pj1->next; //j節點的next指向原來i節點的next
pi2->next = tmp; //i節點的next節點指向原來j節點的next
}
}
uj5u.com熱心網友回復:
謝謝啊,剛開始自學,操作起來比較困難轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/47649.html
標籤:C語言
