Hỏi về hàm MaxSP danh sách liên kết C++

Cho em hỏi là tại sao hàm MaxSP của em không hoạt động ạ, em thấy ko có lỗi gì trong đó cả, em cảm ơn ạ.

#include <iostream>
#include <string.h>
using namespace std;
struct CongNhan
{
    char MCN[50];
    char Ten[50];
    int NamSinh, SoSP;
};
struct Node
{
    CongNhan *info;
    Node *pNext;
    Node *pPrev;
};
struct DList
{
    Node *pHead;
    Node *pTail;
};
Node *GetNode(CongNhan *x)
{
    Node *p = new Node;
    if (p != NULL)
    {
        p->info = x;
        p->pNext = p->pPrev = NULL;
    }
    return p;
}
void Init(DList &L)
{
    L.pHead = L.pTail = NULL;
}
CongNhan *inputCN()
{
    CongNhan *x = new CongNhan;
    cin.ignore(1, '\n');
    cin.getline(x->MCN, 50);
    cin.getline(x->Ten, 50);
    cin >> x->NamSinh >> x->SoSP;
    return x;
}
void outputCN(Node *p)
{
    cout << p->info->MCN << "\t" << p->info->Ten << "\t" << p->info->NamSinh << "\t" << p->info->SoSP << endl;
}
void AddHead(DList &L, CongNhan *x)
{
    Node *newele = GetNode(x);
    if (L.pHead == NULL)
    {
        L.pHead = L.pTail = newele;
    }
    else
    {
        newele->pNext = L.pHead;
        L.pHead->pPrev = newele;
        L.pHead = newele;
    }
}
void AddTail(DList &L, CongNhan *x)
{
    Node *newele = GetNode(x);
    if (L.pTail == NULL)
    {
        L.pHead = L.pTail = newele;
    }
    else
    {
        L.pTail->pNext = newele;
        newele->pPrev = L.pTail;
        L.pTail = newele;
    }
}
void CreateDlist(DList &L, int n)
{
    CongNhan *x;
    for (int i = 1; i <= n; i++)
    {
        x = inputCN();
        AddTail(L, x);
    }
}
void PrintDlist(DList L, int n)
{
    Node *p = L.pHead;
    while (p != NULL)
    {
        outputCN(p);
        p = p->pNext;
    }
}
void MaxSP(DList L, int n)
{
    int max=L.pHead->info->SoSP;
    Node *p=L.pHead;
   while (p!=NULL)
   {
       if(max<p->info->SoSP)
       {
           max=p->info->SoSP;
       }
       p=p->pNext;
   }
   while ((p!=NULL))
   {
       if(max==p->info->SoSP)
       {
           outputCN(p);
       }
       p=p->pNext;
   }
   
}
int main()
{
    int n;
    DList L;
    Init(L);
    cin >> n;
    CreateDlist(L, n);
    PrintDlist(L, n);
    MaxSP(L,n);
}

Sau khi chạy xong vòng lặp while thứ nhất thì p đang bằng NULL đấy bạn.

3 Likes

à dạ em cảm ơn, em quên mất là đang gán p=p.next
vậy là phải gán thêm k=L.pHead

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