Hoán đổi Node trong sắp xếp

Em đang gặp khó khăn chỗ hoán đổi giữa hai Node trong dslk, mọi người giúp em với ạ.
Cụ thể em làm bài toán sắp xếp chọn. Chỗ hoán đổi Node em muôn hoán đổi giờ làm thê1 nào ạ?

This post was flagged by the community and is temporarily hidden.

1 Like

Chỉ cần đổi chỗ data của 2 node là dc.

1 Like

viết 1 hàm swap, đổi chỗ data của node, chứ k đổi chỗ node, k thay đổi liên kết, giống như trên mảng ấy

1 Like
void SwapNode(LIST *l, NODE *node_1, NODE *node_2){
	//Trường hợp chỉ có hai Node
	if (countNode(*l) == 2){
		l->pHead = node_2;
		node_2->pNext = node_1;
		node_1->pNext = NULL;
	}
	else{
		//Nếu Node p nằm đầu danh sách
		if (node_1 == l->pHead){
			if (node_1->pNext == node_2){
				//Hai Node nằm cạnh nhau
				NODE *m = node_2->pNext;
				l->pHead = node_2;
				node_2->pNext = node_1;
				node_1->pNext = m;
			}
			else{
				//Hai Node không nằm cạnh nhau
				NODE *k;
				for (k = l->pHead; k->pNext != node_2; k = k->pNext);
				NODE *m = node_2->pNext;
				NODE *n = node_1->pNext;
				l->pHead = node_2;
				node_2->pNext = n;
				k->pNext = node_1;
				node_1->pNext = m;
			}
		}
		else{
			if (node_1->pNext != node_2){
				//Hai Node không nằm cạnh nhau
				NODE *m;
				for (m = l->pHead; m->pNext != node_1; m = m->pNext);
				NODE *n = node_1->pNext;
				NODE *u;
				for (u = l->pHead; u->pNext != node_2; u = u->pNext);
				NODE *v = node_2->pNext;
				m->pNext = node_2;
				node_2->pNext = n;
				u->pNext = node_1;
				node_1->pNext = v;
			}
			else{
				//Hai Node nằm cạnh nhau
				NODE *m;
				for (m = l->pHead; m->pNext != node_1; m = m->pNext);
				NODE *n = node_2->pNext;
				m->pNext = node_2;
				node_2->pNext = node_1;
				node_1->pNext = n;
			}
		}
	}
}
void SelectionSort(LIST *l){
	for (NODE *p = l->pHead; p != NULL; p = p->pNext){
		for (NODE *q = p->pNext; q != NULL; q = q->pNext){
			if (p->Data > q->Data){
				SwapNode(l, p, q);
			}
		}
	}
}

ý tưởng của em thế này ạ. Em muốn đổi địa chỉ ấy ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?