Hoán vị 2 phần tử trong linked list

chào mọi người, minh cài đặt thuật toán sắp xếp trong linked nhưng hàm của mình bị lỗi và mình sửa nhưng vẫn không được, đây là code của mình

void swap(int &a, int &b)
{
	int tmp = a;
	a = b;
	b = tmp;
}

void interchangeSort(List &l)
{
	Node *tmp = l.pHead;
	Node *cur = l.pHead->pNext;
	for (; tmp->pNext != NULL; tmp = tmp->pNext)
	{
		for (; cur != NULL; cur = cur->pNext)
		{
			if (tmp->Data > cur->Data)
			{
				swap(tmp->Data, cur->Data);
			}
		}
	}
}

mong mọi người giúp đõ.

bạn sử dụng hàm swap này nha, mà bạn đưa hết code của bạn lên đây luôn đc ko ?

void swap (int* a, int* b){
	int tmp = *a;
	*a = *b; 
	*b = tmp;
}

mình chỉ định hoán vị data thôi mà bạn, data của mình kiểu int mà bạn
đây là code toàn bài của mình
http://codepad.org/DGkHwHps

Sửa hàm Sort

Code ở đầu topic thì sửa thế này:

        Node *tmp = l.pHead;
	for (; tmp != NULL; tmp = tmp->pNext)
	{
		Node *cur = tmp->pNext;
		for (; cur != NULL; cur = cur->pNext)
		{
			if (tmp->Data > cur->Data)
			{
				swap(tmp->Data, cur->Data);
			}
		}
	}

Code trong link này

thì sửa thế này

	for (Node *tmp = l.pHead; tmp != l.pTail; tmp = tmp->pNext)
	{
		for (Node *cur = tmp->pNext; cur != NULL; cur = cur->pNext)
		{
			if (tmp->Data > cur->Data)
				swap(tmp->Data, cur->Data);
		}
	}

Ngoài lề chút… ý kiến cá nhân: mình nghĩ là không nên cho cả phần tử 0 vào. nên check a = 0 trước khi thêm node.

1 Like

mình đã hiểu, cảm ơn bạn đã góp ý :smiley:

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