01/10/2018, 16:07

Hỏi về xóa phần tử trùng nhau trong danh sách liên kết đơn, chừa lại phần tử bên trái?

void Del_Node(List &L, int k)
{
	Node *p = L.head;
	Node *q = L.head;
	int count = 1;
	while (p != NULL)
	{
		if (count == k-1 )
		{
		q= p->Next;
			p->Next = p->Next->Next;
			delete q;
		}
		p = p->Next;
		count++;
	}
}

void Xoa_Trung(List &L)
{
	Node *p = L.head;
	Node *q = new Node;
	int count = 1;
	int temp = 1;
	for (p; p->Next != NULL; p = p->Next)
	{
		for (q=p->Next; q != NULL; q = q->Next)
		{
			count++;
			if (p->data == q->data)
			{
				Del_Node(L, count);

			}
		}
		count = ++temp;
	}
}

Mọi người xem giúp e đoạn code với ạ. Hàm Del_Node(L,x) e chạy riêng thì đúng. Nhưng vô hàm này thì e ko thể xóa được ạ. Muốn xóa thì phải để là Del_Node(L, count+1); mà nếu để như vậy thì xóa đi phần tử bên phải phần tử cần xóa. nên là bài bị sai mất ạ. Mọi người xem giúp e. e cảm ơn

locdt viết 18:07 ngày 01/10/2018

Bạn up nốt đoạn code của hàm Del_Node lên mọi người biết mới nhận xét được chứ

My Nguyễn viết 18:20 ngày 01/10/2018
void Del_Node(List &L, int k)
{
	Node *p = L.head;
	Node *q = L.head;
	int count = 1;
	while (p != NULL)
	{
		if (count == k-1 )
		{
		q= p->Next;
			p->Next = p->Next->Next;
			delete q;
		}
		p = p->Next;
		count++;
	}
}

e post code thiếu mất. ths a đã nhắc ạ.

Bài liên quan
0