30/09/2018, 21:09

Nhờ người trợ giúp về DSLK :)

có vài vấn đề em muốn hỏi mọi người mong được giúp đỡ.
thứ nhất là: em đang làm hàm xóa 1 phần từ cuối danh sách(Chỉ làm dựa theo hướng dẫn tương tự của thầy) nên không biết là có đúng không ?

int removeHead(LIST &l) // Tương tự xóa đầu :v 
{
	NODE *p;
	int x;
	// Kiem tra danh sach l co rong khong truoc khi xoa?
	if(l.pTail != NULL)
	{
		p = l.pTail;
		x = p->data;
		l.pTail = l.pTail->pNext;// Cập nhật lại pTail mới
		delete p;// kiểm tra sau khi xóa có rỗng ko ?
		if(l.pHead == NULL)
			l.pTail = NULL;
	}
	return x;
}

// Thứ 2 là: em mới học về danh sách liên kết nên còn mơ hồ(đã đọc định nghĩa) nhưng chưa biết vận dụng ntn

Đinh Diệu viết 23:21 ngày 30/09/2018

hàm cập nhập l.ptail có vấn đề chạy chương trình sẽ không ra đúng kết quả.
điều kiện kiểm tra đầu có rỗng không nên để ngoài if(ptail!= null) vì để trong hàm sẽ bị sai.
danh sách rỗng khi tail và head đều rỗng.

Đinh Diệu viết 23:15 ngày 30/09/2018

void deltail(){ // xoa node cuoi
if(a.head==NULL) return;

	if (a.head == a.tail) {
		delhead();
		return ;
	}
	
	for (node *p = a.head ; p!= NULL  ; p = p->next){
		if (p->next == a.tail  ){
			node *temp = a.tail;
			p->next = a.tail->next;
			a.tail = p;
			delete temp;
			break;
		}
	}
}
Lép Xẹp viết 23:21 ngày 30/09/2018

vậy có nghĩa là kiểm trả xem nếu pHead = null hoặc phead= ptail(chỉ có 1 node) thì return.
nếu không thì cho nó chạy từ đầu tới cuối rồi gán 1 biến tạm bằng node cuối(Tail). còn cái đoạn sau ý nghĩa nó ntn có thể giải thích cho em hiểu thêm được không

Quân viết 23:24 ngày 30/09/2018

Danh sách liên kết giống như 1 sợi xích thôi, mỗi phần tử là 1 mắt xích, cứ tưởng tượng như thế thì yêu cầu nào cũng giải quyết dễ dàng mà không lo bị rối

Phạm Ngọc Hiếu viết 23:18 ngày 30/09/2018
void XoaCuoi(LIST &l)
{
      NODE *p;
      for(NODE *k = l.pHead; k != NULL; k = k->pNext)
      {
           if(k == l.pTail)
           {
                l.pTail = p;
                l.pTail->pNext = NULL;
                delete k;
                return;
           }
           p = k;
       }
}
Bài liên quan
0