Class linked list

Class linked list

本文关键字:list linked Class      更新时间:2023-10-16

我是一个新手,我不太了解链表,所以当我写程序时,我遇到了麻烦。它在ostream& operator<<(ostream& os, const LinkedList &ll)中有一个错误,我不知道。这是我的代码:

LinkedList.h

#pragma once
#include<iostream>
using namespace std;
struct Node
{
    int infor;
    Node *pNext;
};
class LinkedList
{
    Node *pHead, *pTail;
    int curN;
public:
    //default constructor
    LinkedList();
    //destructor
    ~LinkedList();
    static Node* CreateNode(const int& n);
    Node* AddHead(const int &n);
    Node* AddTail(const int &n);
    Node* RemoveHead();  
    Node* RemoveTail();  
    friend ostream& operator<<(ostream& os, const LinkedList &ll);
    int& operator[](const int& i);
    static int SoNguyenMax();
};

LinkedList.cpp

#include "LinkList.h"
LinkedList::LinkedList()
{
    pHead = pTail = NULL;
}
LinkedList::~LinkedList()
{
}
static Node* CreateNode(const int &n)
{
    Node *NewNode = new Node;
    if (NewNode == NULL)
    {
        cout << "Khong du bo nho" << endl;
        return NULL;
    }
    else 
    {
        NewNode->infor = n;
        NewNode->pNext = NULL;
    }
    return NewNode;
}
Node* LinkedList::AddHead(const int &n)
{
    Node *u = new Node;
    u->infor = n;
    if (pHead == NULL)
        pHead = pTail = u;
    else
    {
        u->pNext = pHead;
        pHead = u;
    }
    return pHead;
}
Node* LinkedList::AddTail(const int &n)
{
    Node *u = new Node;
    u->infor = n;
    if (pHead == NULL)
        pHead = pTail = u;
    else
    {
        pTail->pNext = u;
        pTail = u;
    }
    return pTail;
}
Node* LinkedList::RemoveHead()
{
    Node *p;
    p = pHead;
    pHead = pHead->pNext;
    delete p;
    return pHead;
}
Node* LinkedList::RemoveTail()
{
    Node *p, *q;
    p = pHead;
    while (p != pTail)
    {
        q = p;
        p = p->pNext;
    }
    pTail = q;
    q->pNext = NULL;
    delete p;
    return pTail;
}
ostream& operator<<(ostream& os, const LinkedList &ll)
{
    for (Node *k = ll.pHead; k != NULL; k = k->pNext)
        os << k->infor << "   ";
    return os;
}

主要功能
#include"LinkList.h"
int main()
{
    LinkedList l;
    l.AddHead(15);
    l.AddHead(123456);
    cout << l << endl;
    return 0;
}

:[Autos table:]

  • k 0xcdcdcdcd {infor=??pNext = ? ?} Node *
  • 噢。pHead 0x00abf4d8 {infor=123456 pNext=0x00abf238 {infor=15 pNext=0xcdcdcdcd {infor=??pNext = ? ?}}}节点* const
  • ll{pHead=0x00abf4d8 {infor=123456 pNext=0x00abf238 {infor=15 pNext=0xcdcdcdcd {infor=???pNext = ? ?}}}…}

请帮帮我。谢谢!

尝试使用while循环:

ostream& operator << (ostream &os, const LinkedList &ll)
{
    Node* k = ll.pHead;
    while (k != NULL)
    {
        os << k->_data << ", ";
        k = k->pNext;
    }
    return os;
}

但是我发现了一些东西。变量"INFOR"可能与"INFO"混淆