Untitled

mail@pastecode.io avatarunknown
plain_text
a month ago
1.9 kB
4
Indexable
Never
#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;
}