Skip to content

Commit 632a89a

Browse files
authored
Merge pull request #31 from yusuf601/main
feat: menambahkan method splice after
2 parents 515b675 + 971f69c commit 632a89a

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

header/forward_list.hpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,16 @@ class forward_lists{
457457
head->next = prev;
458458
}
459459
public:
460+
/**
461+
* @brief Method Assign
462+
* Assign dipakai untuk mereplace list saat ini dengan list baru
463+
* overload method assign
464+
* assign(n,value) ->insert value sebanyak n kali
465+
* assign(initializer_list<T>)->replace value pada initializer list ke list saat ini
466+
* assign(iterator begin,iterator end) ->replace mulai dari iterator begin sampai sebelum iterator end
467+
*
468+
* @details Time complexity O(n),Space Complexity O(n)
469+
*/
460470
void assign(std::size_t n,const T& value){
461471
clear();
462472
Node* curr = head;
@@ -499,6 +509,50 @@ class forward_lists{
499509
++itr1;
500510
}
501511
}
512+
public: //slice after
513+
/**
514+
* @brief slice after
515+
* method untuk memindahkan node dari satu list ke list lain
516+
* tanpa menyalin data,tetapi move node pointer
517+
*
518+
* @details Time complexity O(1),Space Complexity O(1)
519+
*/
520+
void splice_after(const Iterator pos,forward_lists& others,const Iterator It){
521+
Node* src = It.get_raw();
522+
Node* moved = src->next;
523+
src->next = moved->next; //src->next = src->next->next
524+
525+
Node* dest = pos.get_raw();
526+
moved->next = dest->next; //hubungkan ke list tujuan
527+
dest->next = moved;
528+
others.size--;
529+
size++;
530+
}
531+
void splice_after(const Iterator pos,forward_lists&& others,const Iterator It){
532+
Node* src = It.get_raw();
533+
Node* moved = src->next;
534+
src->next = moved->next; //src->next = src->next->next
535+
536+
Node* dest = pos.get_raw();
537+
moved->next = dest->next; //hubungkan ke list tujuan
538+
dest->next = moved;
539+
others.size--;
540+
size++;
541+
}
542+
void splice_after(const Iterator pos,forward_lists& others){
543+
Node* src = pos.get_raw();//pos object saat ini
544+
Node* begin = others.begin(); //begin object lain
545+
Node* end = others.end();
546+
//hubungkan node terakhir ke object saat ini
547+
Node* moved = src->next; //object saat ini
548+
end->next = moved; //end->next = src->next
549+
//hubungkan ke list tujuan
550+
Node* curr = src; //curr menunjuk src
551+
curr->next = begin;//curr next adalah begin dari object lain
552+
//moved->next = begin; //object saat ini
553+
size = others.size;
554+
others.size = 0;
555+
}
502556
public:
503557
/**
504558
* @brief method untuk print semua node list

0 commit comments

Comments
 (0)