#include <iostream>
using namespace std;
class Node
{
public :
int element;
Node* next_node;
};
class List
{
public:
List()
{
first_node = NULL;
size = 0;
}
Node* get_first()
{
return first_node;
}
bool isempty() const
{
return (size == 0);
}
void push_front(int _element)
{
Node* new_p = new Node; //建立一個新節點
new_p->element = _element; //把新內容丟到新節點
new_p->next_node = first_node; //把新節點的'下一個節點'設為原本的第一個節點
first_node = new_p; //將指向第一節點的指標指向新節點
size++;
}
void insert_at(int index, int _element)
{
if (index == 0)
push_front(_element);
else
{
Node* front_node = first_node;
for (int i = 1; i < index; i++)
front_node = front_node->next_node;
push(front_node, _element);
}
}
void printOut() const
{
Node* p = first_node;
while (p != NULL)
{
cout << p->element << " -> ";
p = p->next_node;
}
cout << "NULL" << endl << "size = " << size << endl;
}
int get_size()
{
return size;
}
protected:
Node* first_node;
int size;
void push(Node* front_node,int _element)
{
Node* new_p = new Node;
new_p->element = _element;
new_p->next_node = front_node->next_node;
front_node->next_node = new_p;
size++;
}
};
int main()
{
List myList;
myList.push_front(23);
myList.push_front(24);
myList.push_front(25);
myList.push_front(27);
myList.push_front(2);
myList.push_front(32);
myList.printOut();
myList.insert_at(4, 89);
myList.printOut();
//destructor
Node* dn = myList.get_first(); //node to be deleted
Node* ndn = dn->next_node; //next node to be deleted
int ct = 0;
while(ndn != nullptr)
{
delete dn;
dn = ndn;
ndn = dn->next_node;
ct++;
}
cout << "ct=" << ct << endl;
delete dn;
ct++;
cout << "ct=" << ct << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIE5vZGUKewpwdWJsaWMgOgoJaW50IGVsZW1lbnQ7CglOb2RlKiBuZXh0X25vZGU7Cn07CgpjbGFzcyBMaXN0CnsKcHVibGljOgoJTGlzdCgpCgl7CgkJZmlyc3Rfbm9kZSA9IE5VTEw7CgkJc2l6ZSA9IDA7Cgl9CglOb2RlKiBnZXRfZmlyc3QoKQoJewoJCXJldHVybiBmaXJzdF9ub2RlOwoJfQoJYm9vbCBpc2VtcHR5KCkgY29uc3QKCXsKCQlyZXR1cm4gKHNpemUgPT0gMCk7Cgl9Cgl2b2lkIHB1c2hfZnJvbnQoaW50IF9lbGVtZW50KQoJewoJCU5vZGUqIG5ld19wID0gbmV3IE5vZGU7CQkJLy/lu7rnq4vkuIDlgIvmlrDnr4Dpu54KCQluZXdfcC0+ZWxlbWVudCA9IF9lbGVtZW50OwkJLy/miormlrDlhaflrrnkuJ/liLDmlrDnr4Dpu54KCQluZXdfcC0+bmV4dF9ub2RlID0gZmlyc3Rfbm9kZTsJLy/miormlrDnr4Dpu57nmoQn5LiL5LiA5YCL56+A6bueJ+ioreeCuuWOn+acrOeahOesrOS4gOWAi+evgOm7ngoJCWZpcnN0X25vZGUgPSBuZXdfcDsJCQkJLy/lsIfmjIflkJHnrKzkuIDnr4Dpu57nmoTmjIfmqJnmjIflkJHmlrDnr4Dpu54KCQlzaXplKys7Cgl9Cgl2b2lkIGluc2VydF9hdChpbnQgaW5kZXgsIGludCBfZWxlbWVudCkKCXsKCQlpZiAoaW5kZXggPT0gMCkKCQkJcHVzaF9mcm9udChfZWxlbWVudCk7CgkJZWxzZQoJCXsKCQkJTm9kZSogZnJvbnRfbm9kZSA9IGZpcnN0X25vZGU7CgkJCWZvciAoaW50IGkgPSAxOyBpIDwgaW5kZXg7IGkrKykKCQkJCWZyb250X25vZGUgPSBmcm9udF9ub2RlLT5uZXh0X25vZGU7CgkJCXB1c2goZnJvbnRfbm9kZSwgX2VsZW1lbnQpOwoJCX0KCX0KCXZvaWQgcHJpbnRPdXQoKSBjb25zdAoJewoJCU5vZGUqIHAgPSBmaXJzdF9ub2RlOwoJCXdoaWxlIChwICE9IE5VTEwpCgkJewoJCQljb3V0IDw8IHAtPmVsZW1lbnQgPDwgIiAtPiAiOwoJCQlwID0gcC0+bmV4dF9ub2RlOwoJCX0KCQljb3V0IDw8ICJOVUxMIiA8PCBlbmRsIDw8ICJzaXplID0gIiA8PCBzaXplIDw8IGVuZGw7Cgl9CglpbnQgZ2V0X3NpemUoKQoJewoJCXJldHVybiBzaXplOwoJfQpwcm90ZWN0ZWQ6CglOb2RlKiBmaXJzdF9ub2RlOwoJaW50IHNpemU7Cgl2b2lkIHB1c2goTm9kZSogZnJvbnRfbm9kZSxpbnQgX2VsZW1lbnQpCgl7CgkJTm9kZSogbmV3X3AgPSBuZXcgTm9kZTsKCQluZXdfcC0+ZWxlbWVudCA9IF9lbGVtZW50OwoJCW5ld19wLT5uZXh0X25vZGUgPSBmcm9udF9ub2RlLT5uZXh0X25vZGU7CgkJZnJvbnRfbm9kZS0+bmV4dF9ub2RlID0gbmV3X3A7CgkJc2l6ZSsrOwoJfQp9OwoKaW50IG1haW4oKQp7CglMaXN0IG15TGlzdDsKCW15TGlzdC5wdXNoX2Zyb250KDIzKTsKCW15TGlzdC5wdXNoX2Zyb250KDI0KTsKCW15TGlzdC5wdXNoX2Zyb250KDI1KTsKCW15TGlzdC5wdXNoX2Zyb250KDI3KTsKCW15TGlzdC5wdXNoX2Zyb250KDIpOwoJbXlMaXN0LnB1c2hfZnJvbnQoMzIpOwoJbXlMaXN0LnByaW50T3V0KCk7CglteUxpc3QuaW5zZXJ0X2F0KDQsIDg5KTsKCW15TGlzdC5wcmludE91dCgpOwoKCS8vZGVzdHJ1Y3RvcgoJTm9kZSogZG4gPSBteUxpc3QuZ2V0X2ZpcnN0KCk7CQkvL25vZGUgdG8gYmUgZGVsZXRlZAoJTm9kZSogbmRuID0gZG4tPm5leHRfbm9kZTsJCQkvL25leHQgbm9kZSB0byBiZSBkZWxldGVkCglpbnQgY3QgPSAwOwoJd2hpbGUobmRuICE9IG51bGxwdHIpCgl7CgkJZGVsZXRlIGRuOwoJCWRuID0gbmRuOwoJCW5kbiA9IGRuLT5uZXh0X25vZGU7CgkJY3QrKzsKCX0KCWNvdXQgPDwgImN0PSIgPDwgY3QgPDwgZW5kbDsKCWRlbGV0ZSBkbjsKCWN0Kys7Cgljb3V0IDw8ICJjdD0iIDw8IGN0IDw8IGVuZGw7CgoJcmV0dXJuIDA7Cn0=