Untitled
unknown
plain_text
2 years ago
1.9 kB
14
Indexable
#include <iostream>
using namespace std;
int cnt;
int slPhantu;
struct Node
{
int data;
Node* prev;
Node* next;
}node[30000];
struct LinkedList
{
Node head;
Node tail;
}ll;
void connect( Node* a , Node* b){
a->next = b;
b->prev = a;
}
void init(){
cnt = 0;
slPhantu = 0;
connect(&ll.head,&ll.tail);
}
void add(int K){
node[cnt].data = K;
connect(&node[cnt],ll.head.next);
connect(&ll.head,&node[cnt]);
cnt++;
slPhantu++;
}
void addd(int K){ // add dit
node[cnt].data = K;
connect(ll.tail.prev,&node[cnt]);
connect(&node[cnt],&ll.tail);
cnt++;
slPhantu++;
}
void print(){
Node * p = ll.head.next;
while ( p != &ll.tail){
cout << p ->data << " ";
p = p->next;
}
cout << endl;
}
//void insert(int index, int K){
// node[cnt].data = K;
//
// connect(node[index].prev,&node[cnt]);
// connect(&node[cnt],&node[index]);
//}
void insert(int idx , int K){
if( idx >= slPhantu ){
addd(K);
return;
}
Node * p = ll.head.next;
int i = 0;
while (p != &ll.tail)
{
if( i == idx){
node[cnt].data = K;
connect(p->prev, &node[cnt]);
connect(&node[cnt],p);
slPhantu++;
cnt++;
return;
}
p = p ->next ;
i++;
}
}
void Del_index(int idx ){
if( idx >= slPhantu) return;
Node * p = ll.head.next;
int i = 0;
while (p != &ll.tail)
{
if( i == idx){
connect(p->prev,p->next);
slPhantu--;
}
p = p-> next;
i++;
}
}
void del_First(){
if(ll.head.next == &ll.tail) return;
Node * tem = ll.head.next;
connect(tem->prev,tem->next);
slPhantu--;
}
int main(){
init ();
add(1);
print ();
add(2);
print ();
addd(2);
addd(2);
addd(2);
print ();
del_First();
print();
del_First();
print();
insert(2,7);
print();
insert(4,7);
print();
Del_index(2);
print();
return 0;
}Editor is loading...