cuốn sách gpt4 ai đã làm

Cách xóa phần tử cuối cùng được thêm vào danh sách liên kết trong C++

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 13:44:05 29 4
mua khóa gpt4 Nike

Đây là lần đầu tiên tôi sử dụng con trỏ. Tôi có một chương trình chèn số vào danh sách liên kết, in danh sách và xóa các số cụ thể khỏi danh sách. Nó hoạt động trừ khi tôi cố xóa số được chèn cuối cùng.

nút.h

#ifndef Node_h
#xác định Node_h

#include
using namespace std;

nút lớp
{
public:
dữ liệu int;
Nút *tiếp theo;

public:
Nút();
};

#endif

nút.cpp

#include "Node.h"

Nút::Nút()
{
}

danh sách liên kết.h

#ifndef Danh sách liên kết_h
#define Danh sách liên kết_h

#include "Node.h"

lớp Danh sách liên kết
{
private:
Nút *pL;

public:
Danh sách liên kết();
chèn khoảng trống (int nr1);
void deleteNr(int nr1);
void printL();
};

#endif

Linked list.cpp //Chương trình này đang tạo một "danh sách liên kết" gồm các số

#include "LinkedList.h"

Danh sách liên kết::Danh sách liên kết()
{
pL = KHÔNG;
}

void LinkedList::insert(int nr1)
{
Nút *p = Nút mới;
p->dữ liệu = nr1;
p->tiếp theo = pL;
pL = p;
}

void LinkedList::deleteNr(int nr1)
{
Nút *p = pL;
Nút *p2 = pL;
while (p != NULL & p->data != nr1)
{
p2 = p;
p = p->tiếp theo;
}

nếu (p != NULL)
{
p2->tiếp theo = p->tiếp theo;
xóa p;
}
}

void LinkedList::printL()
{
Nút *p = pL;

trong khi (p != NULL)
{
cout << p->dữ liệu << "-> ";
p = p->tiếp theo;
}
}

chính.cpp

#include "LinkedList.h"

menu int();

//////// chủ yếu /////////
int main()
{
lựa chọn int1, nr1;
Danh sách liên kết lk1;

lựa chọn1 = menu();

trong khi (lựa chọn1 <= 3)
{
nếu (lựa chọn1 == 1)
{
cout << "Nhập số." << endl;
cin >> nr1;
lk1.insert(nr1);
}

khác nếu (lựa chọn1 == 2)
{
cout << "Nhập số." << endl;
cin >> nr1;
lk1.deleteNr(nr1);
}

khác nếu (lựa chọn1 == 3)
{
lk1.printL();
cout << endl << endl;
}

khác nếu (lựa chọn1 == 4)
{
cout << "Thoát khỏi chương trình." << endl;
system("pause");
exit(1);
}

lựa chọn1 = menu();
} // kết thúc vòng lặp while
}

menu int()
{
lựa chọn int1;

cout << "1. Chèn một số vào danh sách liên kết." << endl;
cout << "2. Xóa một số khỏi danh sách liên kết." << endl;
cout << "3. In danh sách liên kết." << endl;
cout << "4. Thoát khỏi chương trình."
cout << "Nhập lựa chọn." << endl;
cin >> lựa chọn1;

trả về lựa chọn1;
}

câu trả lời hay nhất

Vấn đề của bạn là thông thường p2 là một nút sau p trong danh sách, nhưng nếu bạn muốn xóa nút đầu tiên thì vòng lặp while đầu tiên trong hàm delete có 0 lần lặp, p2 và p giống nhau. Tiêu đề đã bị xóa nhưng pL không được cập nhật. Nó chỉ trỏ đến bộ nhớ chưa được phân bổ. Điều này có thể khiến nút trông giống như chưa bị xóa hoặc có thể gây ra lỗi phân tách và sự cố. Dù bằng cách nào, đây là hành vi sai trái. Bạn cần đảm bảo kiểm tra xem nút cần xóa có phải là nút đầu tiên hay không và cập nhật pL.

Hãy thử một cái gì đó như thế này

void LinkedList::deleteNr(int nr1)
{
Nút *p = pL;
Nút *p2 = pL;
if(p != NULL && nr1 == p->data)
{
pL = p->tiếp theo;
xóa p;
return;
}

while (p != NULL && p->data != nr1)
{
p2 = p;
p = p->tiếp theo;
}

nếu (p != NULL)
{
p2->tiếp theo = p->tiếp theo;
xóa p;
}
}

Nếu bạn muốn có thể xóa một danh sách liên kếtsố 1 củatất cả Chẳng hạn, bạn cần thêm một vòng lặp khác:

void LinkedList::deleteNr(int nr1)
{
Nút *p = pL;
while(p != NULL && nr1 == p->data)
{
pL = p->tiếp theo;
xóa p;
p = pL;
}
Nút *p2 = pL;

trong khi (p != NULL)
{
p2 = p;
p = p->tiếp theo;
if(nr1 == p->dữ liệu)
{
p2->tiếp theo = p->tiếp theo;
xóa p;
}
}
}

Về c++ - Cách xóa phần tử cuối cùng được thêm vào danh sách liên kết C++, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/26615287/

29 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress