30/09/2018, 20:47

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 ạ?

Tao Không Ngu. viết 22:51 ngày 30/09/2018

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

Gió viết 22:49 ngày 30/09/2018

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

abcxyz viết 22:55 ngày 30/09/2018

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

Phan Trọng Thuyên viết 22:59 ngày 30/09/2018
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 ạ

Bài liên quan
0