#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();
Node* dn = myList.get_first(); //node to be deleted
Node* ndn = dn->next_node; //next node to be deleted
for (int i = 0; i < myList.get_size(); i++)
{
delete dn;
dn = ndn;
ndn = dn->next_node;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKY2xhc3MgTm9kZQp7CnB1YmxpYyA6CglpbnQgZWxlbWVudDsKCU5vZGUqIG5leHRfbm9kZTsKfTsKIApjbGFzcyBMaXN0CnsKcHVibGljOgoJTGlzdCgpCgl7CgkJZmlyc3Rfbm9kZSA9IE5VTEw7CgkJc2l6ZSA9IDA7Cgl9CglOb2RlKiBnZXRfZmlyc3QoKQoJewoJCXJldHVybiBmaXJzdF9ub2RlOwoJfQoJYm9vbCBpc2VtcHR5KCkgY29uc3QKCXsKCQlyZXR1cm4gKHNpemUgPT0gMCk7Cgl9Cgl2b2lkIHB1c2hfZnJvbnQoaW50IF9lbGVtZW50KQoJewoJCU5vZGUqIG5ld19wID0gbmV3IE5vZGU7CQkJLy/lu7rnq4vkuIDlgIvmlrDnr4Dpu54KCQluZXdfcC0+ZWxlbWVudCA9IF9lbGVtZW50OwkJLy/miormlrDlhaflrrnkuJ/liLDmlrDnr4Dpu54KCQluZXdfcC0+bmV4dF9ub2RlID0gZmlyc3Rfbm9kZTsJLy/miormlrDnr4Dpu57nmoQn5LiL5LiA5YCL56+A6bueJ+ioreeCuuWOn+acrOeahOesrOS4gOWAi+evgOm7ngoJCWZpcnN0X25vZGUgPSBuZXdfcDsJCQkJLy/lsIfmjIflkJHnrKzkuIDnr4Dpu57nmoTmjIfmqJnmjIflkJHmlrDnr4Dpu54KCQlzaXplKys7Cgl9Cgl2b2lkIGluc2VydF9hdChpbnQgaW5kZXgsIGludCBfZWxlbWVudCkKCXsKCQlpZiAoaW5kZXggPT0gMCkKCQkJcHVzaF9mcm9udChfZWxlbWVudCk7CgkJZWxzZQoJCXsKCQkJTm9kZSogZnJvbnRfbm9kZSA9IGZpcnN0X25vZGU7CgkJCWZvciAoaW50IGkgPSAxOyBpIDwgaW5kZXg7IGkrKykKCQkJCWZyb250X25vZGUgPSBmcm9udF9ub2RlLT5uZXh0X25vZGU7CgkJCXB1c2goZnJvbnRfbm9kZSwgX2VsZW1lbnQpOwoJCX0KCX0KCXZvaWQgcHJpbnRPdXQoKSBjb25zdAoJewoJCU5vZGUqIHAgPSBmaXJzdF9ub2RlOwoJCXdoaWxlIChwICE9IE5VTEwpCgkJewoJCQljb3V0IDw8IHAtPmVsZW1lbnQgPDwgIiAtPiAiOwoJCQlwID0gcC0+bmV4dF9ub2RlOwoJCX0KCQljb3V0IDw8ICJOVUxMIiA8PCBlbmRsIDw8ICJzaXplID0gIiA8PCBzaXplIDw8IGVuZGw7Cgl9CglpbnQgZ2V0X3NpemUoKQoJewoJCXJldHVybiBzaXplOwoJfQpwcm90ZWN0ZWQ6CglOb2RlKiBmaXJzdF9ub2RlOwoJaW50IHNpemU7Cgl2b2lkIHB1c2goTm9kZSogZnJvbnRfbm9kZSxpbnQgX2VsZW1lbnQpCgl7CgkJTm9kZSogbmV3X3AgPSBuZXcgTm9kZTsKCQluZXdfcC0+ZWxlbWVudCA9IF9lbGVtZW50OwoJCW5ld19wLT5uZXh0X25vZGUgPSBmcm9udF9ub2RlLT5uZXh0X25vZGU7CgkJZnJvbnRfbm9kZS0+bmV4dF9ub2RlID0gbmV3X3A7CgkJc2l6ZSsrOwoJfQp9OwogCmludCBtYWluKCkKewoJTGlzdCBteUxpc3Q7CglteUxpc3QucHVzaF9mcm9udCgyMyk7CglteUxpc3QucHVzaF9mcm9udCgyNCk7CglteUxpc3QucHVzaF9mcm9udCgyNSk7CglteUxpc3QucHVzaF9mcm9udCgyNyk7CglteUxpc3QucHVzaF9mcm9udCgyKTsKCW15TGlzdC5wdXNoX2Zyb250KDMyKTsKCW15TGlzdC5wcmludE91dCgpOwoJbXlMaXN0Lmluc2VydF9hdCg0LCA4OSk7CglteUxpc3QucHJpbnRPdXQoKTsKIAogCglOb2RlKiBkbiA9IG15TGlzdC5nZXRfZmlyc3QoKTsJCS8vbm9kZSB0byBiZSBkZWxldGVkCglOb2RlKiBuZG4gPSBkbi0+bmV4dF9ub2RlOwkJCS8vbmV4dCBub2RlIHRvIGJlIGRlbGV0ZWQKCWZvciAoaW50IGkgPSAwOyBpIDwgbXlMaXN0LmdldF9zaXplKCk7IGkrKykKCXsKCQlkZWxldGUgZG47CgkJZG4gPSBuZG47CgkJbmRuID0gZG4tPm5leHRfbm9kZTsKCX0KIAoJcmV0dXJuIDA7Cn0=