Sửa lỗi sắp xếp danh sách liên kết

mình có chương trình bên dưới, mọi người có thể xem giúp mình hàm
void ListQSort(TListElem* &list) được không ạ

#include "stdafx.h"
#include <iostream>
using namespace std;

struct TListElem {
	int Info;
	TListElem *Next;
};

TListElem* CreateNode(int Data)
{
	TListElem* pListElem;
	pListElem = new TListElem;
	if (pListElem == NULL)
		return NULL;
	pListElem->Info = Data;
	pListElem->Next = NULL;
	return pListElem;
}

bool AddHead(TListElem* &list, int Data)
{
	TListElem *pListElem;
	pListElem = CreateNode(Data);
	if (pListElem == NULL)
		list = pListElem;
	else {
		pListElem->Next = list;
		list = pListElem;
	}
	return true;
}
void PrintList(TListElem *list)
{
	TListElem *pListElem;
	pListElem = list;
	while (pListElem != NULL)
	{
		cout << pListElem->Info << " ";
		pListElem = pListElem->Next;
	}
}

void ListQSort(TListElem* &list)
{
	TListElem *p, *x, *last;
	TListElem *list1, *list2;
	TListElem *last1, *last2;
	list = last = NULL;
	if (list == last) return;
	list1 = last1 = NULL;
	list2 = last2 = NULL;
	x = list;
	list = x->Next;
	x->Next = NULL;
	while (list != NULL)
	{
		p = list;
		list = list->Next;
		p->Next = NULL;
		if (p->Info <= x->Info)
			AddHead(list1, p->Info);
		else
			AddHead(list2, p->Info);
	}
	ListQSort(list1);
	ListQSort(list2);
	if (list1 != NULL)
	{
		list = list1;
		last1->Next = x;
	}
	else
		list = x;
	x->Next = list2;
	if (list2 != NULL)
		last = last2;
	else
		last = x;
}

int main()
{
	TListElem *list;
	list = NULL;
	int Data;
	do
	{
		cout << "Nhap vao du lieu: ";
		cin >> Data;
		if (Data == -1)
			break;
		AddHead(list, Data);
	} while (Data != -1);
	cout << "Du lieu da duoc nhap:\n";
	PrintList(list);
	cout << "\n";
	cout << "Danh sach sau khi sap xep:\n";
	ListQSort(list);
	PrintList(list);
	cout << "\n";
	return 0;
}

không chạy được là do dòng list = last = null. thay đồi thành last = null là được. nhưng chưa chạy được, khi xuống phần gán x cho danh sách sẽ gặp lỗi bạn tự giải quyết nha.

bạn nói rõ hơn được ko, mình chỉ nhìn ra dòng list = x->Next; cần chuyển thành
list = list->Next, cảm ơn bạn

Bạn gán list = last = null sau đó lại đặt điều kiện
Last == list thì nó sẽ thoát khỏi hàm mà không làm gì cả.

làm phiền bạn thêm chút nhé, tại nó vẫn ko chạy được
‘nhưng chưa chạy được, khi xuống phần gán x cho danh sách sẽ gặp lỗi bạn tự giải quyết nha.’ là sao vậy bạn

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